簡體   English   中英

如何在不使用Apache POI解析的情況下從大型excel文件復制整個工作表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM