Создать нумерованный список динамических элементов в слове, используя OpenXML - PullRequest
0 голосов
/ 29 ноября 2018

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

Я не уверен, как взять этот список и преобразовать его в нумерованный список слов с правильным форматированием.Любая помощь, пожалуйста.Пример списка приведен ниже:

  1. Перейдите к http://www.google.com/ordername/basket.aspx?quantity=1&productId=23334
  2. Введите код обновления: DG% $ 2 & * JH и нажмитеКнопка «Обновить».
  3. Выполните процедуру оформления заказа и оплатите, используя выбранный вами метод.

Все это генерируется во время выполнения, и значения поступают изDB

Я пытался использовать Open XML Productivity Tool для получения кода, но слишком сложно, когда каждый элемент списка над ним делился на несколько частей, а затем добавлялся.

Также мне нужен этот список в серединеdocument - используя .dotx здесь.

Код, который я пробовал, который частично работает без каких-либо гиперссылок и полужирного текста, приведен ниже:

private static void AddBulletList(List<Run> runList, MainDocumentPart mainDocumentPart)
    {
        Body body = mainDocumentPart.Document.Body;
        Paragraph parentPara = body.Descendants<Paragraph>().FirstOrDefault(k => k.InnerText.Contains("text after which I need numbered list"));
        Paragraph emptyPara = new Paragraph(new Run(new Text("")));
        parentPara.InsertAfterSelf(emptyPara);
        NumberingDefinitionsPart numberingPart = mainDocumentPart.NumberingDefinitionsPart;
        var numberId = numberingPart.Numbering.Elements<NumberingInstance>().Count() + 1;
        foreach (Run runItem in runList)
        {
            // Create items for paragraph properties
            var numberingProperties = new NumberingProperties(new NumberingLevelReference() { Val = 0 }, new NumberingId() { Val = numberId });
            var spacingBetweenLines1 = new SpacingBetweenLines() { After = "60" };  // Get rid of space between bullets
            var indentation = new Indentation() { Left = "720", Hanging = "360" };  // correct indentation 

            ParagraphMarkRunProperties paragraphMarkRunProperties1 = new ParagraphMarkRunProperties();
            RunFonts runFonts1 = new RunFonts() { Ascii = "Arial", HighAnsi = "Arial", EastAsia = "Calibri", ComplexScript = "Arial" };
            FontSize fontSize1 = new FontSize() { Val = "20" };
            FontSizeComplexScript fontSizeComplexScript1 = new FontSizeComplexScript() { Val = "20" };
            paragraphMarkRunProperties1.Append(runFonts1);
            paragraphMarkRunProperties1.Append(fontSize1);
            paragraphMarkRunProperties1.Append(fontSizeComplexScript1);

            // create paragraph properties
            var paragraphProperties = new ParagraphProperties(numberingProperties, spacingBetweenLines1, indentation, paragraphMarkRunProperties1);

            // Create paragraph 
            var newPara = new Paragraph(paragraphProperties);

            // Add run to the paragraph
            newPara.AppendChild(runItem);

            // Add one bullet item to the body
            //body.AppendChild(newPara);
            emptyPara.InsertAfterSelf(newPara);
        }
    }
...