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 조건이 true가되지 않습니까? – Jayan
엑셀 시트에 쓰고 싶은 행과 열이 이미 있습니까? 그렇지 않으면 getRow() 및 getCell()을 호출하면 null이 반환되므로 아무 것도 얻을 수 없습니다. 또는 HSSFSheet의 Iterable 인터페이스에 의존하고 있기 때문에 반복 횟수가 0이 될 것입니다. 대신 모델 목록을 반복 해보고 createRow() 및 createCell()을 호출하십시오. – nansen
if 조건이 true가됩니다. 모든 것은 각 루프마다 잘 작동합니다. Excel 파일에는 데이터를 쓰고 싶은 행과 열이 들어 있습니다. – krains