Как всегда, есть несколько способов решить проблему с вставкой и форматированием текста. Один из способов - сохранить или пометить значения, которые должны быть отформатированы по-разному, и, после их вставки, использовать Find
, чтобы найти их и применить это форматирование.
Другой способ, который демонстрирует приведенный ниже пример кода, в основном заключается в том, что пытается сделать код в вопросе: форматировать при вставке текста. Однако это не позволяет вставлять весь текст в виде строки. Текст должен быть разбит на части: каждый раздел, требующий различного форматирования, должен быть вставлен индивидуально.
Для этого необходимо работать с Range
объектами. В примере кода используются два объекта Range
: один для всего нового содержимого и один для вставки фрагментов текста. При добавлении нового контента в Range
, если с ним ничего не нужно делать, можно использовать метод InsertAfter
.
Как только новым контентом нужно каким-то образом манипулировать, необходимо сначала «свернуть» Range
до «точки», а затем добавить новый контент. На этом этапе Range
содержит только новое содержимое, поэтому любое примененное форматирование влияет только на новое содержимое.
В примере кода я старался максимально приблизиться к оригиналу, чтобы было легче понять и понять его относительно оригинала - чтобы он не был оптимизирован ...
Microsoft.Office.Interop.Word.Application objword = new Microsoft.Office.Interop.Word.Application();
objword.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateNormal;
Microsoft.Office.Interop.Word.Document objDoc = objword.Documents.Add();
Microsoft.Office.Interop.Word.Range rngFull = objDoc.Content;
Microsoft.Office.Interop.Word.Range rngTarget = rngFull.Duplicate;
rngTarget.InsertAfter("\n");
object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
rngTarget.Collapse(ref oCollapseEnd);
String text = "";
for (int r = 0; r < dgvlib.RowCount; r++)
{
text = text + dgvlib.Rows[r].Cells[1].Value.ToString();
if (dgvlib.Rows[r].Cells[11].Value.ToString()!="")
{
text = text + " Comments:" + dgvlib.Rows[r].Cells[11].Value.ToString() + " ";
rngTarget.InsertAfter(text);
text = "";
rngTarget.Collapse(ref oCollapseEnd);
}
else if (dgvlib.Rows[r].Cells[10].Value.ToString() != "")
{
text = text + " ( Bold Text:";
rngTarget.InsertAfter(text);
text = "";
rngTarget.Collapse(ref oCollapseEnd);
rngTarget.Text = dgvlib.Rows[r].Cells[10].Value.ToString();
rngTarget.Font.Bold = -1;
rngTarget.Collapse(ref oCollapseEnd);
rngTarget.InsertAfter(")");
rngTarget.Font.Bold = 0;
}
text = text + "\n";
}
rngFull.Font.Size = 9;
rngFull.Font.Name = "Arial";
//para1.Range.Text = text;
//rngFull.Paragraphs.Add();
objDoc.SaveAs2(fNameExportWord);
objword.Visible = true;