2013-06-14 3 views
0

Мне нужно объединить много файлов Word в один файл, отправить его для проверки и разделить его снова на те же разделенные файлы. Существует около 200 небольших документов Word.Объединить и разделить документы Word с помощью Microsoft.Office.Interop.Word в C#

Итак, когда я делаю слияние, мне нужно добавить знак любого типа для ссылки, когда я его разделю. Я на самом деле добавление тега с исходным именем файла, конечный файл Слово будет выглядеть следующим образом:

[C: \ DOC \ file1.doc]

Lorem Ipsum боль сидеть Амет, consectetur adipiscing elit. Duis eget ipsum non est ultricies bibendum ac a sapien. Etiam facilisis nunc ut arcu tincidunt, в fermentum ipsum pretium. Phasellus non viverra orci. Vestibulum varius vulputate leo quis fermentum. 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 incdiet 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. Сед, неглазированный либеро. 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 ес consectetur turpis, Vel sagittis arcu. Mauris iaculis lacus ut orci adipiscing, vitae eleifend ipsum egestas. Suspendisse ullamcorper ensat laoreet. Nullam interdum augue eget ante tempor porttitor. Sed dignissim nulla libero, eu ultricies urna vestibulum quis. 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); 
     } 
    } 
    } 
} 

Теперь я stucked, я не» t теперь, как разбить, и я не понял класс 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 секции вернулись :(

ответ

2

По моему мнению, лучшие варианты (вместо тегов) будет соответствовать Закладки:

  1. легко добавить! что-то вроде Activedocument.bookmarks.add... (основано на VBA синтаксис)
  2. легко найти (по имени),
  3. они могут повторяться по for each loop где итерация идет по bookmark name,
  4. они имеют range object property, которая позволяет найти точную точку в вашей документ, в котором находится закладка,
  5. они могут быть zero length range при необходимости
  6. они могут быть невидимыми, если имя начинается с _ (подчеркнуть знак, работает, а только тогда, когда закладка добавлена ​​программно)
+0

Очень полезно, но нужно установить ActiveDocument.Bookmarks.ShowHidden = true; – Kiru

Смежные вопросы