Novacode Docx Equation

Я использую класс Novacode.Docx для генерации файлов Word. Я хочу вставить уравнение, но метод по умолчанию сделал уравнение со строкой. Как я могу написать блок sqrt, например? Благодарю.

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 ответ

Недавно я наткнулся на эту проблему, и я нашел способ отредактировать xml из абзаца, так как кажется, что DocX не имеет этой функции.

Для этого я создал файл.docx в Word с нужными элементами, изменил расширение на.zip и прочитал xml из word\document.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();
Другие вопросы по тегам