Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用Microsoft.Office.Interop.Word合并和拆分Word文档#_C#_Asp.net_Ms Word_Office Interop - Fatal编程技术网

C# 在C中使用Microsoft.Office.Interop.Word合并和拆分Word文档#

C# 在C中使用Microsoft.Office.Interop.Word合并和拆分Word文档#,c#,asp.net,ms-word,office-interop,C#,Asp.net,Ms Word,Office Interop,我需要将许多Word文件合并到一个文件中,将其发送给修订者,然后再次将其拆分为相同的独立文件。大约有200个小字文档 因此,当我进行合并时,我需要添加任何类型的标记,以便在拆分时参考。我实际上添加了一个带有原始文件名的标记,最终的Word文件如下所示: foreach(var file in filesToMerge) { selection.Sections.Add(); selection.InsertFile(Environment.CurrentDirectory + @

我需要将许多Word文件合并到一个文件中,将其发送给修订者,然后再次将其拆分为相同的独立文件。大约有200个小字文档

因此,当我进行合并时,我需要添加任何类型的标记,以便在拆分时参考。我实际上添加了一个带有原始文件名的标记,最终的Word文件如下所示:

foreach(var file in filesToMerge)
{
    selection.Sections.Add();
    selection.InsertFile(Environment.CurrentDirectory + @"\" + file, ref missing, ref missing, ref missing, ref missing);
}
foreach (Word.Section section in wordDocument.Sections)
{
    // do save stuff                    
}
[c:\doc\file1.doc]

Lorem ipsum dolor sit amet,Concertetur Adipising 精英。两种不同的植物都是智者。艾蒂安 发酵过程中的设施是不完整的。 非维维拉虎鲸。外阴静脉曲张前庭 发酵液。Phasellus Adipsicing diam ultricies odio accumsan等 dapibus velit dapibus。这是一个简单的方法。 佩伦茨克·埃利芬德,康瓦利斯·福西布斯的普鲁斯,萨皮恩·普鲁斯 弗林利亚·阿库,一位名叫帕特·多洛·阿库·乌兰科珀·珀鲁斯的蜗牛。维韦拉 麦格纳·内克,埃吉特·卢库斯。在hac habitasse platea 格言。无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵无酵 佩伦茨克大学。Aliquam nulla eros,porttitor quis molestie eu, 莫利斯·维尔·拉库斯。塞德·内克·阿利夸姆·利伯罗。Donec vel congue sapien,sed 尊贵的尼索。一对夫妇,弗林尼利亚·亚库利斯·洛雷姆身份证, 拉齐尼亚

[c:\doc\file1.doc]

[c:\doc\file2.doc]

这是一种弓形骨。 Mauris iaculis lacus ut orci Adipising,ipsum egestas的生命。 拉奥里特的乌拉姆科珀会议暂停。奥古斯·埃吉特国际学校 前临时港口。欧盟ultricies urna自由党领袖 前庭。日本电气公司 乌兰科佩内克临时酒店。赛德·索利西图丁,nisi ut lobortis 索利西图丁、利奥酒后驾车、利奥索达莱斯酒店。 坦普斯的名言

[c:\doc\file2.doc]

我正在使用此代码合并文件,工作正常:

using System;
using System.Collections.Generic;
using Word = Microsoft.Office.Interop.Word;

namespace MyDocs
{
  public class MsWord
  {
    public static void Merge(List<string> filesToMerge, string outputFilename, string documentTemplate)
    {
      object defaultTemplate = documentTemplate;
      object missing = System.Type.Missing;
      object outputFile = outputFilename;

      // Create  a new Word application
      Word._Application wordApplication = new Word.Application();
        
      try
      {
        // Create a new file based on our template
        Word._Document wordDocument = wordApplication.Documents.Add(ref defaultTemplate, ref missing, ref missing, ref missing);

        // Make a Word selection object.
        Word.Selection selection = wordApplication.Selection;
        
        // Loop thru each of the Word documents
        foreach(var file in filesToMerge)
        {
            // create a tag with the file name
            string uid = String.Format("\n[ {0} ]\n", file);

            selection.TypeText(uid);
            selection.InsertFile(file, ref missing, ref missing, ref missing, ref missing);
            selection.TypeText(uid);
        }

        // Save the document to it's output file.
        wordDocument.SaveAs(ref outputFile, 
                            ref missing, ref missing, ref missing, ref missing, ref missing, 
                            ref missing, ref missing, ref missing, ref missing, ref missing, 
                            ref missing, ref missing, ref missing, ref missing, ref missing);

        // Clean up!
        wordDocument = null;
      }
      catch (Exception ex)
      {
        //I didn't include a default error handler so i'm just throwing the error
        throw ex;
      }
      finally
      {
        // Finally, Close our Word application
        wordApplication.Quit(ref missing, ref missing, ref missing);
      }
    }
  }
}
在阅读了这样的文件之后:

foreach(var file in filesToMerge)
{
    selection.Sections.Add();
    selection.InsertFile(Environment.CurrentDirectory + @"\" + file, ref missing, ref missing, ref missing, ref missing);
}
foreach (Word.Section section in wordDocument.Sections)
{
    // do save stuff                    
}

但是现在只返回了两个部分:(

在我看来,最好的选择(而不是标签)是使用书签。书签是:

  • 易于添加!!类似于
    Activedocument.bookmarks.add…
    (基于VBA语法)
  • 很容易找到(名字)
  • 它们可以通过
    对每个循环进行迭代,其中迭代通过
    书签名称进行
  • 它们具有
    范围对象属性
    ,允许您在文档中找到书签的确切位置
  • 如果需要,它们可以是
    零长度范围
  • 如果名称以
    开头,则它们可能不可见(下划线标记,仅在以编程方式添加书签时有效)

  • 非常有用,但需要设置ActiveDocument.Bookmarks.ShowHidden=true;