Open XML SDK for Office

一、Open XML SDK 简介

源码地址:https://github.com/dotnet/Open-XML-SDK

https://github.com/OpenXmlDev/Open-Xml-PowerTools

API文档:https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk

Open-Xml-PowerTools 是一个基于 Open XML SDK 的开源项目,旨在提供更高级的功能和示例代码,用于处理 Open XML 文档(如 DOCX、XLSX 和 PPTX)。

该项目支持多种场景,包括文件拆分、合并、模板数据填充、高保真转换、内容搜索替换、修订管理、图表更新等。

此内容集提供适用于 Office 的 Open XML SDK 中的强类型类的文档和指南。

SDK 基于 System.IO.Packaging API 构建而成,并提供强类型类来处理符合 Office Open XML 文件格式规范的文档。

Office Open XML 文件格式规范是一个开放的、国际的 ECMA-376、第 5 版 和 ISO/IEC 29500 标准。 The Open XML file formats are useful for developers because they are an open standard and are based on well-known technologies: ZIP and XML.

Open XML SDK 简化了操作 Open XML 包和包中基础 Open XML 架构元素的任务。 Open XML SDK 封装开发人员在 Open XML 包上执行的许多常见任务,因此只需几行代码即可执行复杂的操作。

 

二、 word文件合并

说明:当前代码只复制段落文字部分

//只复制文档部分
static void MergeWordDocuments(string[] fileNames, string outputFileName)
{
    using (WordprocessingDocument outputDocument = WordprocessingDocument.Create(outputFileName, WordprocessingDocumentType.Document))
    {
        MainDocumentPart mainPart = outputDocument.AddMainDocumentPart();
        mainPart.Document = new Document();
        Body body = mainPart.Document.AppendChild(new Body());



        foreach (string fileName in fileNames)
        {
            using (WordprocessingDocument inputDocument = WordprocessingDocument.Open(fileName, false))
            {
                var paragraphs = inputDocument.MainDocumentPart.Document.Body.Elements<Paragraph>();

                foreach (var paragraph in paragraphs)
                {
                    body.AppendChild(paragraph.CloneNode(true));
                }
            }
        }
    }
}

 

二、使用xml 文档合并word

此方案存在兼容问题,文字字体样式等转换过程有可能丢失。

static void MergeWithPowerTools(string[] inputFiles, string outputFile)
{
    var sources = new List<OpenXmlPowerTools.Source>();
    foreach (var file in inputFiles)
    {
        sources.Add(new OpenXmlPowerTools.Source(new WmlDocument(file), true));
    }
    var mergedDoc = DocumentBuilder.BuildDocument(sources);
    mergedDoc.SaveAs(outputFile);
}

static void Test2()
{
    MergeWithPowerTools(new string[] { "1.docx", "2.docx" }, "4.docx");
}

 

 

 

 

更多:

.NET Core Aspose Word(.doc,docx)转成pdf文件

C#PDF转图片,PdfiumViewer.Core

FreeSpire.doc,Spire.Pdf PDF转图片,Word转图片,Txt转图片

posted @ 2025-07-18 22:16  天马3798  阅读(114)  评论(0)    收藏  举报