我正在通过重写CustomXMLPart文件来更新word文档。我基本上遵循了本教程: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;
}
问题是我无法弄清楚如何在“text”和“more text”之间添加换行符。我已经尝试过Environment.NewLine,我尝试将其包装在<w:p><w:r><w:t>
标签中。我似乎无法生成有效的docx文件。
任何帮助都将不胜感激。
答案 0 :(得分:3)
“内容控制”属性具有“允许回车”选项。启用此功能,并使用Environment.NewLine
完美运行。
答案 1 :(得分:1)
据我所知,至少我知道你必须将它们包装在段落中以获得回报。所以你得到的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无效的位置?
编辑:
OOXML SDK 2.0附带了一些您可能会觉得有用的验证工具。
答案 2 :(得分:0)
通过原始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