OpenXML Копирование разделов документа

Я пишу приложение для создания документа Word из нескольких вложенных документов. Субдокументы отформатированы таким образом, чтобы я мог использовать заголовки и создать древовидное представление для выбора разделов для включения в окончательный документ. Типичная схема размещения:

HeadingLevel1

Текст | Таблица | Drawing

HeadingLevel2

Текст | Таблица | Drawing

HeadingLevel2

...

Мне удалось скопировать разделы с текстом, но я не получаю копии таблиц или рисунков.

    private void processDonor(String donorFileName, WordprocessingDocument destinationDocument)
    {
        using (WordprocessingDocument donorDoc = WordprocessingDocument.Open(CreateDocumentPath(donorFileName), false))
        {
            //
            // Get a reference to the Body of the document
            //
            Body donorBody = donorDoc.MainDocumentPart.Document.Body;
            Body destinationBody = destinationDocument.MainDocumentPart.Document.Body;

            //
            // Get a list of paragraphs
            //
            List<Paragraph> donorParaList = new List<Paragraph>();
            donorParaList = donorBody.OfType<Paragraph>().Where(p => p.ParagraphProperties != null).ToList();

            bool sectionFound = false;
            foreach (Paragraph donorParagraph in donorParaList)
            {
                if (donorParagraph.ParagraphProperties != null &&
                    donorParagraph.ParagraphProperties.ParagraphStyleId != null &&
                    donorParagraph.ParagraphProperties.ParagraphStyleId.Val.Value.Contains("Heading"))
                {
                    sectionFound = false;
                    List<TreeNode> sections = documentSectionTreeView.FlattenTree().Where(n => n.Text == donorParagraph.InnerText).ToList();

                    foreach (TreeNode section in sections)
                    {
                        if (((ParagraphTreeNode)section).fileName == donorFileName &&
                            section.StateImageIndex != (int)CheckState.Unchecked)
                        {
                            sectionFound = true;
                            break;
                        }
                    }

                    if (sectionFound)
                    {
                        Paragraph p = (Paragraph)donorParagraph.CloneNode(true);
                        destinationBody.AppendChild(p);
                    }
                }
                else
                {
                    if (sectionFound)
                    {
                        Paragraph p = (Paragraph)donorParagraph.CloneNode(true);
                        destinationBody.AppendChild(p);
                    }
                }
            }
        }
    }

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

Я хотел бы перейти к выбранному заголовку и скопировать все из этого заголовка в следующий заголовок так, чтобы AltChunk обрабатывал все, если копировал весь документ.

0 ответов

Другие вопросы по тегам