C# 在C中使用Microsoft.Office.Interop.Word合并和拆分Word文档#
我需要将许多Word文件合并到一个文件中,将其发送给修订者,然后再次将其拆分为相同的独立文件。大约有200个小字文档 因此,当我进行合并时,我需要添加任何类型的标记,以便在拆分时参考。我实际上添加了一个带有原始文件名的标记,最终的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 + @
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;