簡體   English   中英

使用 C# 和 openXML SDK 寫入大型 docX 而不將其加載到內存文件中

[英]Write to the large docX without loading it in memory file using C# and openXML SDK

我有一個很大的word docx文件(超過100 MB),它包含一個表格,需要在這個表格中添加額外的數據我使用以下方法

using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(filepath, true))
{
    var table = wordDocument.MainDocumentPart.Document.Body.Elements<Table>().First();
    foreach (var row in data)
    {
        var tRow = new TableRow();

        foreach (var cell in row)
        {
            var hCell = new TableCell();
            var cPar = new Paragraph(new Run(new Text(cell)));
            hCell.Append(cPar);
            tRow.Append(hCell);
        }

        table.Append(tRow);
    }
}

似乎整個文檔都已加載到內存中。 有沒有辦法在不加載整個 DOM 結構的情況下寫入文件,例如使用 SAX 方法?

我已經多次嘗試這樣做,但到目前為止我的結論是,不,你不能。

我嘗試了很多方法,甚至使用像 Aspose 這樣的 3rd 方工具,但到目前為止,它們都需要將完整文檔加載到內存中。

這是有道理的,考慮到您必須找到入口點,並且如何在不評估內容的情況下做到這一點,這需要加載內容?

到目前為止,額外開銷最少(但使用最多內存)的方法是使用 VSTO,因此在文檔打開時通過 Word AddIn 使用它。 它提供了最少的額外開銷,因為文檔無論如何都是打開的(用戶已在 Word 中打開它) - 但是如果您需要在沒有用戶操作的情況下執行此操作,或者必須在服務器端完成而不啟動完整的 Word 應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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