2012-03-31 2 views
0

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(); 
    } 
} 
+0

if 조건이 true가되지 않습니까? – Jayan

+0

엑셀 시트에 쓰고 싶은 행과 열이 이미 있습니까? 그렇지 않으면 getRow() 및 getCell()을 호출하면 null이 반환되므로 아무 것도 얻을 수 없습니다. 또는 HSSFSheet의 Iterable 인터페이스에 의존하고 있기 때문에 반복 횟수가 0이 될 것입니다. 대신 모델 목록을 반복 해보고 createRow() 및 createCell()을 호출하십시오. – nansen

+0

if 조건이 true가됩니다. 모든 것은 각 루프마다 잘 작동합니다. Excel 파일에는 데이터를 쓰고 싶은 행과 열이 들어 있습니다. – krains

답변

0

내가 게시 한 소스 코드가 정확했다. Excelfile에는 0의 자그마한 일부 Colum이 있었기 때문에 나는 표시되지 않은 컬럼에 글을 쓰려고 시도했다.

0

게시물에 대한 귀하의 의견에서 for 루프에서 수행중인 작업이 올바른 것으로 가정합니다. 코드에서 숫자 값을 쓰고있는 것처럼 보이고 읽는 것과 같은 통합 문서에도 쓰고있는 것 같습니다. 저는 셀에 정확하게 쓰고 있다고 생각하지만 수식 평가를하는 것은 엑셀이 형식을 이상하게 형식화하는 것을 좋아하는 이래로 숫자가있는 까다로운 일.

입력 파일 대신 새 파일에 쓰고 적어도 스프레드 시트를 생성하는지 확인하십시오.

또한 라인을 주석 때 발생하는보고 시도 :

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 
관련 문제