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配列を返すことに注意してください**
通話をに移動する必要があります
_sheet.autoSizeColumn(columnNumber);
_
データが追加された後のコード内のポイントに。
[〜#〜] api [〜#〜] へのリンクは次のとおりです
それがそれを行う唯一の方法です。同じ問題がありました。データを入力する前に、メソッドautoSizeColumn()
を呼び出していました。お役に立てば幸いです
巨大なレポートを生成している場合、s.autoSizeColumn(j);
はパフォーマンスを低下させることに注意してください。
Forループを移動します:
for (int j = 0; j < 6; j++) {
s.autoSizeColumn(j);
}
ブックに書き込んでオブジェクトを閉じる直前になります。
wb.write(out);