我正在编写一个从Microsoft Access数据库读取数据并将此数据写入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();
}
}
答案 0 :(得分:0)
根据您对帖子的评论,我假设您在for循环中所做的事情是正确的。看起来你正在从代码中编写数值,而且你也在写入你读过的同一个工作簿。我有一个理论,你可能正在向Cell写正确但是做公式评估可能会做一些由于Excel喜欢格式化格式,所以数字很棘手。
尝试写入新文件而不是输入文件,看看是否会生成电子表格,至少。
另外,请尝试查看注释掉该行时会发生什么:
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
答案 1 :(得分:0)
我发布的源代码是正确的。在Excelfile中有一些Colums与0一起 - 所以我试着写一个没有显示的专栏。