Разрывы строк в CustomXMLPart - PullRequest
3 голосов
/ 28 июня 2011

Я обновляю документ Word, переписывая файл CustomXMLPart. Я в основном следовал этому уроку: http://blogs.msdn.com/b/brian_jones/archive/2009/01/05/taking-advantage-of-bound-content-controls.aspx

private bool _makeDoc()
        {

        var path = HttpContext.Current.Server.MapPath("~/Classes/Word/template.docx");
        using (WordprocessingDocument myDoc = WordprocessingDocument.Open(path, true))
        {
            //create new XML string
            //these values will populate the template word doc
            string newXML = "<root>";
                newXML += "<name>";
                newXML += "name goes here";
                newXML += "</name>";
                newXML += "<bio>";
                newXML += "text" + "more text";
                newXML += "</bio>";
            newXML += "</root>";

            MainDocumentPart mainPart = myDoc.MainDocumentPart;

            //delete old xml part
            mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);

            //add new xml part
            CustomXmlPart customXml = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
            using(StreamWriter ts = new StreamWriter(customXml.GetStream()))
            {
                ts.Write(newXML);
            }
            myDoc.Close();
        }
        return true;
    }

Проблема в том, что я не могу понять, как добавить разрыв строки между «текстом» и «больше текста». Я пробовал Environment.NewLine, я пытался обернуть его в теги <w:p><w:r><w:t>. Я не могу заставить его создать действительный файл docx.

Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

В свойствах Content Control есть опция «Разрешить возврат каретки». Включение и использование Environment.NewLine отлично работали.

1 голос
/ 28 июня 2011

Полагаю, вам придется заключить их в абзацы, чтобы получить отдачу, насколько я знаю, по крайней мере. Таким образом, ваш полученный OOXML будет выглядеть примерно так:

<w:p><w:r><w:t>Text</w:t></w:r></w:p>
<w:p><w:r><w:t>More text</w:t></w:r></w:p>

Поскольку это не приводит к действительному OOXML, когда вы делаете это, открыли ли вы пакет OOXML "document.xml" и увидели, где именно XML является недействительным?

Edit:

OOXML SDK 2.0 поставляется с некоторыми инструментами проверки, которые могут оказаться полезными.

0 голосов
/ 06 сентября 2013

через необработанный XML вы можете добавить:

<w:r>
    <w:br />
  </w:r>

через OOXML SDK:

Paragraph paragraph1 = new Paragraph();
Run breakRun = new Run();
breakRun.Append( new Break() );
paragraph1.Append( breakRun );

_document.MainDocumentPart.Document.AppendChild<Paragraph>(paragraph1);
//where _document is the WordProcessingDocument instance
...