none
Как с помощью Open XML SDK изменить текст после его вставки в документ RRS feed

  • Вопрос

  • Добрый День!

    Помогите решить, казалось бы, простую задачу.

    Есть два файла –  Destination.docx и Source.docx. Каждый содержит всего по одной строчке форматированного текста, например «Содержимое 1» и «Содержимое 2». Необходимо программно добавить в первый файл текст из второго файла (с сохранением форматирования), а затем изменить этот текст, например на «Добавленное содержимое».

    Вставка текста из одного файла в другой проблем не вызывает и осуществляется кодом, позаимствованным из примера Microsoft.

    /*
    string fileName1 = @"C:\Test\Destination.docx";
    string fileName2 = @"C:\Test\Source.docx";
    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();
    }
    */

    Если после этого открыть Destination.docx в Word – видны обе строчки. Но когда распаковать этот документ как zip-архив и открыть файл document.xml, находящийся в папке word, то в нем есть только параграф с текстом «Содержимое 1», а вместо второго параграфа – ссылка на AltChunk:

    <w:altChunk r:id="AltChunkId1" />

    И как теперь программно редактировать добавленный параграф?

    Кстати, если открыть Destination.docx в Word, изменить этот параграф вручную, а затем сохранить изменения, то в XML разметке документа появляется второй параграф с измененным содержимым, а AltChunk исчезает. Но как это сделать с помощью Open XML SDK? MS Office нельзя устанавливать на компьютер, так как это сервер.




    16 июля 2020 г. 11:42

Ответы

  • Здравствуйте,

    А данный вариант - Как найти и заменить текст в части документа (Open XML SDK) вам подходит?


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Помечено в качестве ответа Григорич 16 июля 2020 г. 18:28
    16 июля 2020 г. 14:56
    Модератор

Все ответы

  • Здравствуйте,

    А данный вариант - Как найти и заменить текст в части документа (Open XML SDK) вам подходит?


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Помечено в качестве ответа Григорич 16 июля 2020 г. 18:28
    16 июля 2020 г. 14:56
    Модератор
  • Спасибо за совет, Максим.

    Этот вариант подходит для решения поставленной в вопросе задачи. Но, кажется я неудачно задал вопрос, слишком упростил. На самом деле мне нужно таким же способом вставлять не только текст, но и таблицы HTML, и изменять не только содержимое, но и свойства параграфа или таблицы. Поэтому, в ближайшее время, постараюсь сформулировать более конкретный вопрос на эту тему, ведь правильно заданный вопрос содержит в себе половину ответа.

    PS

    Предложенный вариант тоже работает только после пересохранения Destination.docx в Word. А до того Regex не находит вставленную строку и, поэтому, метод Replace ничего не изменяет.


    16 июля 2020 г. 18:27