Novacode Docx方程式

时间:2016-03-20 14:59:40

标签: novacode-docx

我使用Novacode.Docx类生成Word文件。我想要插入方程,但默认方法使用字符串制作方程式。例如How i can write sqrt block?感谢。

using System;
using Novacode;

namespace Program1
{
   class MyClass
   {
      Novacode.DocX Doc;
      MyClass()
      {
         Doc = Novacode.DocX.Create("C:\\1.docx", DocumentTypes.Document);
         Doc.InsertEquation(""); // <- This method insert string
      }
   }
}

1 个答案:

答案 0 :(得分:1)

我最近偶然发现了这个问题,我发现的方法是从段落中编辑xml,因为看起来DocX没有这个功能。

为此,我在Word中使用我想要的元素创建了一个.docx文件,将扩展名更改为.zip,并从word\document.xml文件中读取xml。因此,对于平方根,例如,C#中的代码如下:

DocX doc = DocX.Create("testeDocument.docx");
Paragraph eqParagraph = doc.InsertEquation("");
XElement xml = eqParagraph.Xml;
XNamespace mathNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/math";
XElement omath = xml.Descendants(mathNamespace + "oMath").First();
omath.Elements().Remove();
XElement sqrt= new XElement(mathNamespace + "rad");

XElement deg = new XElement(mathNamespace + "deg");

XElement radProp = new XElement(mathNamespace + "radPr");
XElement degHide = new XElement(mathNamespace + "degHide");
degHide.Add(new XAttribute(mathNamespace + "val", 1));
radProp.Add(degHide);
sqrt.Add(radProp);

sqrt.Add(deg);

XElement rad = new XElement(mathNamespace + "e");
rad.Add(new XElement(mathNamespace + "r", new XElement(mathNamespace + "t", "this goes inside the sqrt")));
sqrt.Add(rad);

omath.Add(sqrt);
doc.Save();