使用c#在单词中插入等式

时间:2018-06-07 10:19:59

标签: c# winforms ms-word

我想使用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();
        }

1 个答案:

答案 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);
   }