Вставьте уравнение в слово, используя c # - PullRequest
0 голосов
/ 07 июня 2018

Я хотел добавить уравнение в Microsoft Word, используя C #.Например, я хочу добавить это:

Уравнение выглядит следующим образом:

$ \ 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} $ в уравнении?Есть ли какие-либо ссылки, показывающие, как записываются уравнения?

Заранее спасибо.

РЕДАКТИРОВАТЬ: «writep» выглядит следующим образом:

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 голосов
/ 07 июня 2018

Проблема, которую вы видите, заключается в том, что вы не указали какую-либо другую целевую позицию, кроме Selection.Когда вы добавляете контент в Word Range, это не меняет Selection.Таким образом, Selection автоматически не перемещается в конец добавленного вами контента.Таким образом, уравнение всегда находится в начале документа.

Если вы хотите, чтобы уравнение следовало сразу за вставленным абзацем, вы должны получить этот абзац или его диапазон.

Я изменил writep, чтобы вернуть объект Word.Range, который я использую в вызывающей процедуре, чтобы свернуть Range до его конечной точки, а затем добавить уравнение в этот Range.

Обратите внимание, что OMaths.Add требует текстовое содержимое в диапазоне.Поэтому я поместил уравнение в Range перед созданием объекта OMath.

Также обратите внимание, что я внес некоторые изменения в ваш код (как объявляются объекты 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);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...