Проблема, которую вы видите, заключается в том, что вы не указали какую-либо другую целевую позицию, кроме 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);
}