web-dev-qa-db-ja.com

Apache POI autoSizeColumn()が正しく機能しない

Apachepoiを使用してExcelファイルに情報を書き込むプログラムを作成しています。すべてのデータをファイルに入力した後、ファイルのすべての列でautoSizeColumnメソッドを呼び出します。ただし、最後に入力したセルの幅に列のサイズを変更します。これは、列の他のセルほど大きくない場合があります。私はそれを正しく使用していることを知っています、そして残念ながら私はコードを投稿するためのインターネットを今持っていませんが、私はできるときに更新します。

わかりました。コードタグを正しく使用しているといいのですが、ここにあります。

public void writeFile() {
    Workbook wb = new HSSFWorkbook();
    Sheet s = wb.createSheet();
    try {

        FileOutputStream out = new FileOutputStream(
                this.getSelectedFile());
        // create a new workbook

        // create a new sheet

        // declare a row object reference
        Row r = null;
        // declare a cell object reference
        Cell c = null;
        // in case of plain ascii
        wb.setSheetName(0, "Street Light Report");
        // create a sheet with 30 rows (0-29)
        // int rownum;
        // short rownum;
        // PrintWriter printOut = new PrintWriter(
        // this.getSelectedFile());
        String[] colName = { "Light Id", "Flagged",
                "Malfunction", "Comments", "Location", "Date" };
        // printOut.println("Light Id,Flagged,Malfunction,Comments,Location,Date");
        Connections.connect();
        String[][] data = Connections.searchForFlagged();
        for (int i = 0; i < data.length; i++) {
            r = s.createRow(i);
        }
        r.setRowNum(0);
        for (int j = 0; j < 6; j++) {
            c = r.createCell(j);
            switch (j) {
            case 0:
                c.setCellValue(colName[j]);
                break;
            case 1:
                c.setCellValue(colName[j]);
                break;
            case 2:
                c.setCellValue(colName[j]);
                break;
            case 3:
                c.setCellValue(colName[j]);
                break;
            case 4:
                c.setCellValue(colName[j]);
                break;
            case 5:
                c.setCellValue(colName[j]);
                break;

            }
        }

        for (int i = 0; i < data.length; i++) {

            r.setRowNum(i + 1);
            for (int j = 0; j < data[i].length; j++) {

                c = r.createCell(j);

                // System.out.println(data[i][j]);

                switch (j) {
                case 0:
                    c.setCellType(Cell.CELL_TYPE_NUMERIC);
                    c.setCellValue(Integer.parseInt(data[i][j]));
                    break;
                case 1:
                    if (data[i][j].equals("true"))
                        c.setCellValue("Yes");
                    else
                        c.setCellValue("No");
                    break;
                case 2:
                    if (data[i][j].equals("I"))
                        c.setCellValue("Intermittent");
                    else
                        c.setCellValue("Not Functional");
                    break;
                case 3:
                    c.setCellValue(data[i][j]);
                    break;
                case 4:
                    c.setCellValue(data[i][j]);
                    break;
                case 5:
                    c.setCellValue(data[i][j]);
                    break;
                }

            }
        }
                                wb.getSheetAt(0).setPrintGridlines(true);
        for (int j = 0; j < 6; j++) {
            s.autoSizeColumn(j);
        }
        wb.write(out);
        out.close();
    } catch (Exception ex) {

    }
};

ここに画像を投稿しますが、担当者が必要です。ポイントと私はちょうどここから始めました。

** ConnectionsクラスはJDBCクラスであるため、JavaはmySQLデータベースから情報を取得して、文字列の2D配列を返すことに注意してください**

8
Billy Stalnaker

通話をに移動する必要があります

_sheet.autoSizeColumn(columnNumber);
_

データが追加された後のコード内のポイントに。

[〜#〜] api [〜#〜] へのリンクは次のとおりです

それがそれを行う唯一の方法です。同じ問題がありました。データを入力する前に、メソッドautoSizeColumn()を呼び出していました。お役に立てば幸いです

11
knowbody

巨大なレポートを生成している場合、s.autoSizeColumn(j);はパフォーマンスを低下させることに注意してください。

3
stanicmail

Forループを移動します:

for (int j = 0; j < 6; j++) {
                    s.autoSizeColumn(j);
                }

ブックに書き込んでオブジェクトを閉じる直前になります。

wb.write(out);
3
javadev