2017-02-07 1 views
1

Excel 파일을 덮어 쓰려고하지만 덮어 쓴 파일이 손상됩니다. 나는 android studio에서 일하고 있는데, 정보를 싱글 엑셀 파일에 저장하려고합니다. 다음은 내 코드는 다음과 같습니다안드로이드에서 apache poi로 덮어 쓰면 Excel 파일이 손상됩니다.

private void saveIntoExcel(String fileName, String[] data) { 
    try { 
     String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getString(R.string.app_name) + "/" + fileName; 

     InputStream inp = new FileInputStream(new File(path)); 

     HSSFWorkbook workbook = new HSSFWorkbook(inp); 
     HSSFSheet sheet = workbook.getSheetAt(0); 
     HSSFRow row; 

     row = sheet.createRow(sheet.getLastRowNum() + 1); 
     for (int i = 0; i < data.length; i++) { 
      HSSFCell cell = row.createCell(i); 
      cell.setCellValue(data[i]); 
     } 

     FileOutputStream fos = null; 
     File file; 

     file = new File(path); 
     fos = new FileOutputStream(file); 

     workbook.write(fos); 
     fos.close();   

     showToast(str_success); 
    } catch (Exception e) { 
     showToast(e.getMessage()); 
    } 
} 

나는 PC에 엑셀 파일이 코드를 테스트하고 완벽하게 작동하지만, 안드로이드의 파일이 손상됩니다.

+1

Android에 표시되는 오류를 포함 할 수 있습니까? 그렇다면 Q를 편집하여 포함하십시오. – xlm

+0

@xlm 코드는 logcat에서 아무런 오류없이 실행됩니다. 프로그램이 모두 정상인 것처럼 실행되지만, PC에서 파일을 열려고하면 Office에서 파일이 손상되었음을 알립니다. –

답변

1

Apache POI는 변경된 파일의 내부 쓰기를 지원하지 않습니다.

새로운 write() 메소드를 통해 이것을 제공하는 것에 대한 논의가 있지만, 현재는 객체를 닫는 동안 오브젝트가 손상되지 않도록 다른 파일에 작성해야합니다. 통합 문서를 닫은 후에는 필요에 따라 이전 파일로 새 파일을 이동할 수 있습니다.

some related discussionthis bug을 참조하십시오.

관련 문제