[ASP .NET]使用Open XML SDK修改Word(.docx)內容

[ASP .NET]使用Open XML SDK修改Word(.docx)內容

前一篇套版產出的多人文件,因為最後一夜會多一個分頁符號,而TemplateEngine.Docx似乎沒有提供修改內容的方式

於是用Open XML SDK來直接修改

參考黑暗執行緒大大對docx的xml說明,先抓出產出的檔案中的分頁符號,看起來抓關鍵字type="page"應該沒錯

用 Document.Body.Descendants() 取回所有 XML 節點再移除關鍵字的內容即可:

using (WordprocessingDocument doc = WordprocessingDocument.Open(targetPath, true))
{
    Document mainPart = doc.MainDocumentPart.Document;
    mainPart.Body.Descendants().Where(x => x.LocalName == "p" && x.InnerXml.Contains("w:type=\"page\"")).Last().Remove();
}

參考資料

https://blog.darkthread.net/blog/insert-image-to-docx/

Open XML SDK

題外話:

在使用Open XML SDK前也曾在NuGet上尋找可以直接改Word內容的套件,試用了DocX_Doc及Xceed.DocX

兩個都可以正確移除分頁,但DocX_Doc免費版一次只能處理最多5頁的docx檔,實務上常常會超過5頁,故放棄,

而Xceed.DocX需要.Net Framework 4.0以上的環境,如果想用.Net Core在Linux環境下使用的話就不能用了,

所以最後還是直接研究Open XML SDK處理。