2013-02-13 66 views
2

我有問題,2007年無法讀取內容(脂肪手指)。第一種似乎可行,因爲工作簿可以在Excel 2007中正確打開,並且有一些變化。Excel中使用2007年的Excel利用XSSF</p> <p>我有下面的兩段代碼在Apache POI使用Apache POI(.xlsx)格式

如果我運行第二個代碼片段,然後在Excel 2007中打開,我收到關於不可讀內容的錯誤。我必須點擊確認框,然後Excel打開我的文件。

爲什麼第二個代碼片段會導致此錯誤?唯一的區別是在第二個我試圖從第2行(零索引)上移兩行所有行...

我真的想要做的是刪除一些標題行,並在我得到了文件中的一些頁腳行。我沒有做任何幻想。我在猜測我誤解了這個API,但我現在一直在爲此爭鬥。

任何想法?我是否應該移動行,或刪除它們,或兩者的組合?

String filename = "C:\\file.xlsx"; 
FileInputStream file = new FileInputStream(new File(fileName)); 

XSSFWorkbook wb = new XSSFWorkbook(file); 

XSSFSheet sheet = wb.getSheetAt(0); 
int lastRow = sheet.getlastRow(); 

sheet.shiftRows(1, lastRow, -1); 


file.close() 
FileOutputStream out = new FileOutputStream(fileName); 
wb.write(out); 
out.flush(); 
out.close(); 

String filename = "C:\\file.xlsx"; 
FileInputStream file = new FileInputStream(new File(fileName)); 

XSSFWorkbook wb = new XSSFWorkbook(file); 

XSSFSheet sheet = wb.getSheetAt(0); 
int lastRow = sheet.getlastRow(); 

sheet.shiftRows(2, lastRow, -2); 


file.close() 
FileOutputStream out = new FileOutputStream(fileName); 
wb.write(out); 
out.flush(); 
out.close(); 

編輯:其實這apears第一片段也造成一個問題...有時???? 我在印象中我做錯了什麼...有什麼建議嗎?

+0

這是錯誤的,因爲你的代碼沒有正確編寫excel表格。你可能錯位一個單元格/行的位置。這種錯誤很常見。你需要驗證你的代碼,可能在這個方法中 - 'sheet.shiftRows(2,lastRow,-2);'。 – Lion 2013-02-13 15:36:02

+0

我知道有什麼不對。我根本不明白爲什麼。 javadoc並沒有太多的說明,我也無法找到關於這個的文檔。 – Brian 2013-02-13 17:40:43

+0

....當我看到發生了什麼「我」得到關於不可讀內容的錯誤,我必須點擊一個確認框,然後excel打開我的文件。「我已經說清楚了。這個問題可能與我的代碼一樣,已經建立。我已經發布了這個問題,希望有比我更多的經驗的人能夠認識到這個問題....此外,如果你閱讀這個問題,你會看到我不是在寫單元格/行,而是試圖從現有文件中刪除它們。 – Brian 2013-02-13 19:25:28

回答

0

我遇到了類似的問題。我認爲問題可能在於處理意見。 在我的情況下,excel文件被Excel報告爲「已損壞」,只要在評論出現時進行了轉換即可。 Excel修復了該文件並報告說它刪除了評論部分,其餘部分都很好。沒有評論但具有相同處理代碼的Excel文件不會導致任何問題。

對不起,這不能解決問題,但也許它提供了一種解決方法。就我而言,我以編程方式刪除所有評論(醜陋)。