我想使用C#向Microsoft Word添加一个等式。例如,我想添加这个:
等式如下:
$ \ SQRT {A ^ 2 + B ^ 3} $
为此,我使用了以下代码:
private void button2_Click(object sender, EventArgs e)
{
object oMissing = System.Reflection.Missing.Value;
_Application oWord;
Microsoft.Office.Interop.Word._Document oDoc;
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
writep(oDoc, "The equation is as follows:", 16, true);
oWord.Selection.OMaths.Add(oWord.Selection.Range);
OMathFunction E = oWord.Selection.OMaths[1].Functions.Add(oWord.Selection.Range,
WdOMathFunctionType.wdOMathFunctionBox);
OMathBox B = E.Box;
B.E.Range.Text = \\ \sqrt{a^2+b^3};
}
其中[writep]是在单词中插入段落的函数。现在我遇到了这些问题:
1-我无法在文本后插入等式。当我运行此代码时,方程式将插入页面顶部。我希望它在左边对齐的另一个段落中的文本后面插入。我用了
2-如何在等式中写出等式$ \ sqrt {a ^ 2 + b ^ 3} $?有没有参考显示方程式是如何写的?
提前致谢。
编辑:'写作'如下:
private void writep(_Document oDoc, string text, int font, bool bold)
{
Paragraph oPara1;
oPara1 = oDoc.Content.Paragraphs.Add();
oPara1.Range.Font.Size = font;
oPara1.Range.Text = text;
oPara1.Range.Font.Name = "Arial";
oPara1.ReadingOrder = WdReadingOrder.wdReadingOrderRtl;
int q = 0;
if (bold)
q = 1;
oPara1.Range.Font.Bold = q;
oPara1.Range.InsertParagraphAfter();
}
答案 0 :(得分:1)
您看到的问题来自于未指定除Selection
之外的任何其他目标位置。当您向Word Range
添加内容时,这不会更改Selection
。因此Selection
不会自动移至您添加的内容的末尾。因此,等式总是在文档的开头。
如果您希望方程式紧跟您插入的段落,则必须获得该段落或其范围。
我已更改writep
以返回一个Word.Range对象,我在调用过程中使用该对象将Range折叠到其终点,然后将该等式添加到该Range。
请注意,OMaths.Add需要Range中的文本内容。所以我在创建OMath对象之前在Range中放了一个等式。
另请注意,我对您的代码进行了一些更改(如何声明Word对象),以便它们在我的测试环境中工作,因此您将无法简单地复制/粘贴。
private Word.Range writep(Word.Document oDoc, string text, int font, bool bold)
{
Word.Paragraph oPara1 = oDoc.Content.Paragraphs.Add();
Word.Range rng = oPara1.Range;
rng.Font.Size = font;
rng.Text = text;
rng.Font.Name = "Arial";
oPara1.ReadingOrder = Word.WdReadingOrder.wdReadingOrderRtl;
int q = 0;
if (bold)
q = 1;
rng.Font.Bold = q;
rng.InsertParagraphAfter();
return rng;
}
private void button1_Click(object sender, EventArgs e)
{
object oMissing = System.Reflection.Missing.Value;
Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document oDoc;
Word.Range rng = null;
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
rng = writep(oDoc, "The equation is as follows:", 16, true);
object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
rng.Collapse(ref oCollapseEnd);
rng.Text = "\\sqrt{a^2+b^3}";
rng.OMaths.Add(rng);
Word.OMathFunction E = rng.OMaths[1].Functions.Add(rng,
Word.WdOMathFunctionType.wdOMathFunctionBox);
}