私はMicrosoft Accessデータベースからデータを読み取り、このデータをExcelシートに書き込むアプリケーションを作成しています。すべて正常に動作しますが、新しいデータをファイルに書き込むことはできません。ここでは、コードです:あなたのポストにあなたのコメントからJavaからapache poiを使用してExcelファイルを書き込む
private static XSSFWorkbook readFile(String filename) throws IOException {
// return new XSSFWorkbook(new FileInputStream(filename));
InputStream inp = new FileInputStream(filename);
XSSFWorkbook wb = null;
try {
wb = (XSSFWorkbook) WorkbookFactory.create(inp);
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return wb;
}
public void writeToFile(LinkedList<TimeRowWrapper> list) {
try {
// read file
XSSFWorkbook workbook = readFile(fileName);
// choose table from index
XSSFSheet sheet = workbook.getSheetAt(kapaSheetIndex);
for (Row row : sheet) {
int rowNum = row.getRowNum();
// iterate over list for row id
for (TimeRowWrapper trw : list) {
if (rowNum == trw.getRowNumber()) {
double hour = Math
.round(trw.getTotalTime()/60.0 * 100.)/100.;
Cell cell = row.getCell(timeCol);
cell.setCellValue(hour);
}
}
}
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
FileOutputStream out = new FileOutputStream(fileName);
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
if条件が成立しないのですか? – Jayan
Excelシートには、書き込みたい行と列がすでに含まれていますか?そうでなければ、getRow()とgetCell()の呼び出しはnullを返すのでどこにも行きません。または、HSSFSheetのIterableインターフェースに依存しているので、繰り返しはゼロになると思います。代わりにモデルリストを反復してみて、createRow()とcreateCell()を呼び出します。 – nansen
if条件がtrueになります。すべてのループはそれぞれのループでうまく動作します。 Excelファイルには、データを書きたい行と列が含まれています。 – krains