C#合并多个Word文档(微软官方免费openxml接口)

g

 /// <summary>
        /// 合并多个word文档(合并到第一文件)
        /// </summary>
        /// <param name="as_word_paths">word文档完整路径</param>
        /// <param name="breakNewPage">true(默认值),合并下一个文档前,自动换页</param>
        /// <returns>无</returns> 
public void MergeWordFiles(string[] as_word_paths, bool breakNewPage = true)
        {
            var ls_first_word = as_word_paths.Length > 0 ? as_word_paths[0] : "";
            if (ls_first_word.fn_isempty())
            {
                return;
            }
            using (WordprocessingDocument doc = WordprocessingDocument.Open(ls_first_word, true))
            {
                var mainPart = doc.MainDocumentPart;
                for (var i = 1; i < as_word_paths.Length; i++)
                {
                   
                    var altChunkId = "cid_" + Guid.NewGuid().ToString().Replace("-", "");
                    var chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
                    //mainPart.Document.Save();
                    using (FileStream fileStream = File.Open(as_word_paths[i], FileMode.Open))
                    {
                        chunk.FeedData(fileStream);
                    }
                    var altChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
                    altChunk.Id = altChunkId;
                    //添加下一页(下一个文档合并此页)
                    if (breakNewPage)
                    {
                        Paragraph newPage = new Paragraph(new Run
                         (new Break() { Type = BreakValues.Page }
                         ));
                        mainPart.Document.Append(newPage, altChunk);
                    }
                    else
                    {
                        mainPart.Document.Append(altChunk);
                    }
                    //mainPart.Document.Body.Append(altChunk);
                }
                //mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last());
                mainPart.Document.Save();
               
            }
        }

https://dev.csdn.net/activity?utm_source=sale_source&sale_source=yebs5WhXjQ

详情了解... 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用C#OpenXML SDK来读取Word文档中指定书签标记的图表。以下是大致的步骤: 1. 导入OpenXML SDK的命名空间。例如:`using DocumentFormat.OpenXml.Packaging;`和`using DocumentFormat.OpenXml.Wordprocessing;`。 2. 打开Word文档,并使用`WordprocessingDocument`类加载文档。例如:`WordprocessingDocument doc = WordprocessingDocument.Open("document.docx", true);`。 3. 获取文档中的书签标记。可以使用`BookmarkStart`和`BookmarkEnd`元素来识别书签标记。例如,使用以下代码获取名为“bookmark1”的书签标记: ```csharp BookmarkStart bookmarkStart = doc.MainDocumentPart.Document.Body.Descendants<BookmarkStart>().Where(b => b.Name == "bookmark1").FirstOrDefault(); BookmarkEnd bookmarkEnd = doc.MainDocumentPart.Document.Body.Descendants<BookmarkEnd>().Where(b => b.Id.Value == bookmarkStart.Id.Value).FirstOrDefault(); ``` 4. 使用书签标记的位置信息,获取书签标记所在的段落和图表。例如,使用以下代码获取名为“bookmark1”的书签标记所在的段落和图表: ```csharp Paragraph paragraph = bookmarkStart.Parent as Paragraph; Drawing drawing = paragraph.Elements<Drawing>().FirstOrDefault(); ChartReference chartReference = drawing.Inline.Graphic.GraphicData.Descendants<ChartReference>().FirstOrDefault(); ``` 5. 获取图表数据,并使用相应的库(如OpenXML SDK、Excel Interop或EPPlus)进行分析和处理。例如,使用以下代码获取图表数据: ```csharp ChartPart chartPart = (ChartPart)doc.MainDocumentPart.GetPartById(chartReference.Id); OpenXmlReader reader = OpenXmlReader.Create(chartPart); while (reader.Read()) { if (reader.ElementType == typeof(SeriesText)) { string seriesText = reader.GetText(); // 处理图表数据 } } ``` 请注意,这只是一个简单的示例,实际情况可能需要根据具体的文档和需求进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoveLearnling

您的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值