2013-11-14 1 views
0

У меня есть требование прочитать существующий файл MS Word 2007 (.docx), заменить string1 на строку2, а затем прикрепить " недавно измененный "файл в виде вложения по электронной почте" на лету ".Чтение файла .DOCX с диска, его редактирование, а затем прикрепление к электронной почте на лету с использованием .NET.

Мы используем v2.0 от Microsoft DocumentFormat.OpenXml SDK и .NET 4.5 (C#)

Это тупик меня, потому что:

  1. Я пытаюсь сделать это без editting исходный файл ; или
  2. Копирование оригинального файла, а затем его редактирование; или
  3. Сохранение нового файла на диск (а затем его удаление); или
  4. Изменение формата файла, например. к .XML

Следующий код взят из другого вопроса stackoverflow, но работает с редактированием файла orignal на диске.

Я застрял в том, как передать documentText в конструктор вложения как MemoryStream. Созданное электронное письмо повреждено и больше, чем размер файла orignal. Я попытался GzipStream и не радость :-(

 string sourceFilePath = @"C:\Template.docx";   

     string documentText; 

     using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(sourceFilePath, true)) 
     { 
      using (StreamReader reader = new StreamReader(wordDoc.MainDocumentPart.GetStream())) 
      { 
       documentText = reader.ReadToEnd(); 
      } 

      documentText = documentText.Replace("searchstring", "replacementstring"); 

      using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create))) 
      { 
       sw.Write(documentText); 
      } 
      MailMessage email = new MailMessage(); 
      email.Attachments.Add(new Attachment(sourceFilePath)); 
      // Send email etc 
     } 

Приветствиях

Kyle

ответ