我需要将许多Word文件合并到一个文件中,将其发送给一个revisor并将其再次拆分为相同的分隔文件。大约有200个小Word文档。
所以,当我进行合并时,我需要添加任何类型的标记作为参考,以便何时进行拆分。我实际上是在添加一个带有原始文件名的标签,最终的Word文件将是这样的:
[c:\ doc \ file1.doc]
Lorem ipsum dolor坐下来,念诵adipistur ELIT。 Duis eget ipsum non est ultricies bibendum ac a sapien。 Etiam facilisis nunc ut arcu tincidunt,in fermentum ipsum pretium。 Phasellus non viverra orci。 Vestibulum varius vulputate leo quis 发酵。 Phasellus adipiscing diam ultricies odio accumsan,et dapibus velit dapibus。 Sed eleifend lectus et lacinia facilisis。 Pellentesque eleifend,purus in convallis faucibus,sapien purus fringilla arcu,volutpat dolor arcu ullamcorper purus。在viverra magna neque,eget imperdiet urna luctus at。在hac habitasse platea dictumst。 Praesent aliquam arcu diam,quis fermentum lacus pellentesque ut。 Aliquam nulla eros,porttitor quis molestie eu, mollis vel lacus。 Sed nec aliquam libero。 Donec vel congue sapien,sed dignissim nisl。 Praesent dui nulla,fringilla iaculis lorem id, lacinia imperdiet odio。
[c:\ doc \ file1.doc]
[c:\ doc \ file2.doc]
Proin eu consectetur turpis,vel sagittis arcu。 Mauris iaculis lacus ut orci adipiscing,vitae eleifend ipsum egestas。 Suspendisse ullamcorper consequat laoreet。 Nullam interdum augue eget ante tempor porttitor。 Sed dignissim nulla libero,eu ultricies urna 前庭。 Phasellus rhoncus leo sed leo gravida,nec ullamcorper neque tempor。 Sed sollicitudin,nisi ut lobortis sollicitudin,dui enim tristique leo,ac sodales leo elit quis odio。 Nulla dictum mattis mi in tempus。
[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);
}
}
}
}
现在我被困了,我现在不怎么分裂,我不理解Interop类,我需要阅读整个Word,找到标签并将其拆分成单独的文件。
我认为标签不是最佳方式,因为我不需要显示它。我尝试使用这样的Section对象:
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
}
但现在只返回了2个部分:(
答案 0 :(得分:2)
在我看来,最好的选择(而不是标签)将是使用书签。书签是:
Activedocument.bookmarks.add...
(基于VBA语法)for each loop
迭代,其中迭代经过bookmark name
,range object property
,可让您在文档中找到书签所在的确切位置zero length range
_
开头,它们可能是不可见的(下划线标记,只有在以编程方式添加书签时才有效)