Итак, я создал библиотеку C #, которая манипулирует и редактирует документы Word.Это, конечно, относится к OpenXML SDK.Однако, когда я использую библиотеку, мне не нужно ссылаться и на .dll.
Один метод, который я мог бы использовать из другого проекта, имеет параметр WordprocessingDocument
и имеет этот профиль:
public bool FillTemplate(ref WordprocessingDocument document, XElement data)
{
//EDIT the document and return True if succesful.
}
Проблема здесь, конечно, в том, что мне нужно создать WordprocessingDocument
внутри другого проекта, а не просто пропустить поток.
Хорошо, я думаю, самое простое решение - это другой профильпо методу:
public bool FillTemplate(Stream document, XElement data)
{
WordprocessingDocument doc = WordprocessingDocument.Open(document, true);
return FillTemplate(doc, data);
}
Но я получил, как мне казалось, блестящую идею, просто создать метод расширения для Stream:
public static WordprocessingDocument ConvertToWordDocument(this Stream stream, bool isEditable)
{
return WordprocessingDocument.Open(stream, isEditable);
}
и использовать его следующим образом:
FileStream fStream = new FileStream(@"C:\Users\Me\Desktop\SomeDoc.docx", FileMode.Open);
var doc = fStream.ConvertToWordDocument(true);
filler.FillTemplate(ref doc, getXmlDataFor(42));
fStream.Flush();
fStream.Close();
Однако по какой-то причине это не работает (Doc меняется, но, похоже, не возвращается в поток), и я немного скептически отнесся к идее о том, как я использую Streams иWordprocessingDocument
упаковка / упаковочная штука.
Что было бы оптимальным решением, чтобы у меня не было особых проблем?Как на самом деле класс WordprocessingDocument
работает в отношении передачи его в качестве параметра и тому подобное?Почему поток не изменил первоначально открытый документ?