2014-02-18 143 views
0

當我修改服務器中現有的excel文件並複製到本地機器並打開它時,我得到excel could not open because some content is unreadable, do you want to open and repair this workbook?下面是我的代碼。有人可以建議我如何避免這種情況?使用apache poi修改現有的excel

File f = new File(directory+"users.xlsx"); 
FileInputStream fileInputStream = new FileInputStream(f); 

workbook = new XSSFWorkbook(fileInputStream); 
sheet = workbook.getSheetAt(0); 
Row row = sheet.getRow(4); 
for(int i = 0; i<5; i++) 
{ 
Cell cell = row1.getCell(i); 
cell.setCellValue(formattedDate); 
cell.setCellStyle(normalStyle); 
} 

FileOutputStream out = new FileOutputStream(f, false); 
       workbook.write(out); 
       out.close(); 

一直試圖解決8小時,沒有運氣。如果有人能夠闡明這一點,會很感激。

+0

嘗試使用WoorkbookFactory.create(的FileInputStream)閱讀和使用新FileOutputStream中另一個文件( f,錯誤);而不是「f」使用另一個文件。我應該工作。 – Koitoer

+0

@Koitoer您能否詳細說明一下? – rick

回答

3

移動輸出到不同的文件,不要忘記關閉輸入和輸出 並使用此http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

File f = new File(directory+"users.xlsx"); 

FileInputStream fileInputStream = new FileInputStream(f); 

Workbook workbook = WorkbookFactory.create(fileInputStream); 
fileInputStream.close(); 
sheet = workbook.getSheetAt(0); 
Row row = sheet.getRow(4); 
for(int i = 0; i<5; i++) 
{ 
Cell cell = row1.getCell(i); 
cell.setCellValue(formattedDate); 
cell.setCellStyle(normalStyle); 
} 

FileOutputStream out = new FileOutputStream(f, false); 
       workbook.write(out); 
       out.close(); 
+0

我想修改現有的文件,因爲我在代碼中使用它來訪問它。我無法每次更改名稱,因爲名稱在File()中的代碼中使用。請建議 – rick

+0

我根據您的意見更新代碼。 – Koitoer

+0

因此,我需要改變的唯一事情就是使用WorkBookFactory? – rick