Как создать файл слова из существующих данных XML-файла со всеми настройками (формат и выравнивание), используя метод openxml в VB.NET? - PullRequest
1 голос
/ 12 марта 2019

У меня есть файл XML, сгенерированный во время выполнения в моей программе. Этот XMLfile.InnerText () имеет некоторые форматы (например, -enter, пробелы, табуляции, выравнивания), как показано ниже,

Это тест драйвера для Windows

2115 -XXXXXXXXXX ФИЛИАЛ XXXX

XXXXXXXXXX XXXXXXXXXX

XXXXXXXXXX XX

XXXXXXXXXX: 23.08.16 XXX XXX:

08/23/19 XXXXXXXX XXXXXX: 9


XXXXXX XXX X

XXXX: XXX 0,01

XXXXXX XXX

XXXXX: 1

XXXXXXXXX

Я пытаюсь создать текстовый документ с этим XMLfile.InnerText (с указанным выше форматом и выравниваниями), используя VB.net (предоставленный используемый код в качестве примера).

Dim vWordDoc As WordprocessingDocument = WordprocessingDocument.Create(tmppath, WordprocessingDocumentType.Document)

                ' Set the content of the document so that Word can open it.
                Dim vMainPart As MainDocumentPart = vWordDoc.AddMainDocumentPart()

                ' Create the document structure and add some text.
                vMainPart.Document = New Document()

                Dim vBody As Body = vMainPart.Document.AppendChild(New Body())
                Dim vPara As Paragraph = vBody.AppendChild(New Paragraph())
                Dim run As Run = vPara.AppendChild(New Run())
                run.AppendChild(New Text(XMLFile.InnerText))
                vMainPart.Document.Save()
                vWordDoc.Close()

Используя метод Microsoft.Office.Interop.Word.Application -> Range.InsertXML(), я могу перенести этот же формат в файл слова.

Но я хочу сохранить тот же формат XML во вновь созданном файле слов с помощью метода OpenXML?

1 Ответ

0 голосов
/ 13 марта 2019

Пользовательский интерфейс Word / классическая объектная модель автоматизирует многие вещи, которые недоступны при работе непосредственно с содержимым файла, когда они не открыты в приложении Word.InsertXML по сути выполняет преобразование содержимого XML в Word.Прямого эквивалента в Open XML SDK не существует.

Что есть в Open XML SDK: AlternativeFormatImportPart , AlternativeFormatImportPartType Enum и altChunk ,

Согласно документации Enum, XML является допустимым форматом файла для этого подхода.Будет ли результат таким же, как InsertXML, вам придется проверить.Ссылка altChunk содержит пример кода, который вы можете использовать для начальной точки, который я скопирую здесь для удобства.

using System.Linq;  
using System.IO;  
using DocumentFormat.OpenXml.Packaging;  
using DocumentFormat.OpenXml.Wordprocessing;  
namespace altChunk  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {            
            string fileName1 = @"c:\Users\Public\Documents\Destination.docx";  
            string fileName2 = @"c:\Users\Public\Documents\Source.docx";  
            string testFile = @"c:\Users\Public\Documents\Test.docx";  
            File.Delete(fileName1);  
            File.Copy(testFile, fileName1);  
            using (WordprocessingDocument myDoc =  
                WordprocessingDocument.Open(fileName1, true))  
            {  
                string altChunkId = "AltChunkId1";  
                MainDocumentPart mainPart = myDoc.MainDocumentPart;  
                AlternativeFormatImportPart chunk =   
                    mainPart.AddAlternativeFormatImportPart(  
                    AlternativeFormatImportPartType.WordprocessingML, altChunkId);  
                using (FileStream fileStream = File.Open(fileName2, FileMode.Open))  
                    chunk.FeedData(fileStream);  
                AltChunk altChunk = new AltChunk();  
                altChunk.Id = altChunkId;  
                mainPart.Document  
                    .Body  
                    .InsertAfter(altChunk, mainPart.Document.Body  
                    .Elements<Paragraph>().Last());  
                mainPart.Document.Save();  
            }             
        }  
    }  
}  

Этот подход заключается в хранении внешнего содержимого как части пакета ZIP.Когда Word открывает файл, он выполняет преобразование, интегрируя содержимое в документ Word.Сохраненный контент удаляется в процессе.

...