Похоже, это динамически созданный документ Word.
Поскольку у вас есть документ в форме Document
объекта, вы должны иметь возможность получить его строку XML, а затем байты, выполнив следующее:
Microsoft.Office.Interop.Word.Document d = new Microsoft.Office.Interop.Word.Document();
// All of your building of the document was here
// The object must be updated with content
string docText = d.WordOpenXML; // this assumes content is here
byte[] bytes = Encoding.UTF8.GetBytes(docText);
Я не думаю, что сначала необходимо сохранить объект в файловой системе, поскольку у вас уже есть объект, который вы создали все динамически, в памяти. Это просто вопрос доступа к его WordOpenXML
.
Если вы извлекаете файл из файловой системы, он будет выглядеть примерно так же, за исключением того, как документ открывается первым:
string sourceFilePath = @"C:\test.docx";
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
var document = wordApp.Documents.Open(sourceFilePath);
string docText = document.WordOpenXML;
byte[] bytes = Encoding.UTF8.GetBytes(docText);
Если вы хотите загрузить эти байты обратно в документ, вам нужно сделать следующее:
string documentPath = @"C:\test.docx"; // can be modified with dynamic paths, file name from database, etc.
byte[] contentBytes = null;
// … Fill contentBytes from the database, then...
// Create the Word document using the path
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(documentPath, true))
{
// This should get you the XML string...
string docText = System.Text.Encoding.UTF8.GetString(contentBytes);
// Then we write it out...
using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
}
}
См. Как я могу сформировать документ Word, используя поток байтов для получения дополнительной информации.