[英]How to copy entire sheets from large excel files without parsing them using Apache POI?
我是正式用戶,所以我總是在這里找到答案,但是現在我不得不問。
我正在使用最新的apache-poi 3.8版本(從2012/03/26開始),我必須處理具有多個工作表的單個文件,其中只有一個工作表包含大量數據(超過1000列和10000行)。
我只需要在大型表上添加更多列即可。 因此,使用現有的工具,我應該使用SAX來讀取它,並使用SXSSF來重寫它。
Excel文件已經預先格式化為每張紙具有不同的樣式和圖像,因此能夠在不使用大紙的情況下復制文件將很有幫助。
我有一個問題:如何在不解析的情況下使用SAX(從中的輸入流)復制工作表? 我在這里嘗試這樣做,但是XSSFWorkbook
的字段工作sheets
的可見性設置為private。
很棒的事情是,如果將來在POI開發人員的計划中擁有SXSSFWriter.SheetIterator
類的東西。
謝謝閱讀,
亞瑟
**更新* *
該文件太大,無法將其作為通用XSSFWorkbook(OutOfMemoryException)打開。 是否可以從InputStream創建和XSSFSheet? 如下所示:
XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader
.getSheetsData();
int index = 0;
while (iter.hasNext()) {
InputStream stream = iter.next();
String sheetName = iter.getSheetName();
if (!sheetName.equalsIgnoreCase("BigSheetThatIDontWant")) {
Sheet newSheet = new XSSFSheet(stream);
stream.close();
}
++index;
}
非常感謝你的回答。
您將必須閱讀文件。
關於第二個問題,請參見public java.util.Iterator <XSSFSheet> XSSFWorkbook.iterator()
Allows foreach loops:
XSSFWorkbook wb = new XSSFWorkbook(package);
for(XSSFSheet sheet : wb){
}
通過對POI和復制操作的經驗,我逐漸意識到,就性能而言,關鍵不是要復制一張或多張工作表,更安全,更輕松地加載整個工作簿,刪除不必要的工作表,然后將結果保存到另一個文件。
並為Andy的迭代器+1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.