更新的尝试:
我已经根据 klugerama 答案尝试了以下方法,但它似乎对我不起作用:
var entries = new List<string>();
entries.Add("some text here, ");
entries.Add("some more text here, ");
entries.Add("and even more text here. ");
foreach (var entry in entries)
{
object newRangeStart = Globals.ThisDocument.bmkStart.Range.End;
Globals.ThisDocument.bmkStart.Range.InsertAfter(entry);
object newRangeEnd = Globals.ThisDocument.bmkStart.Range.End;
var newRange = Globals.ThisDocument.Range(ref newRangeStart, ref newRangeEnd);
if (entry == "some more text here, ")
{
newRange.Bold = -1;
}
}
第一个问题是它向后插入文本,即:
and even more text here. some more text here, some text here,
而不是:
some text here, some more text here, and even more text here.
第二期是原期,没有加粗体。我试图让输出变成:
some text here, some more text here, and even more text here.
原始问题:
我正在尝试创建一个操作 Pane ,为用户提供很多选项。根据所选的选项,特定文本将插入到文档中。我已经能够相当快速且轻松地创建操作 Pane 部分和文本插入部分。但插入的文本没有任何格式。
插入文本的正确方法是什么,可以轻松地为将插入到文档中的文本添加格式(从编程角度来说)?
目前,我正在执行类似的操作来生成文本并将其插入到文档中,这使得应用格式变得困难:
if (CheckBox1.Checked == true)
{
stMainText.Append("some text here, ");
}
if (CheckBox2.Checked == true)
{
stMainText.Append("some more text here, ");
}
if (CheckBox3.Checked == true)
{
stMainText.Append("and even more text here. ");
}
Globals.ThisDocument.bmkStart.Text = TheText.ToString();
如果所有 3 个复选框都被选中,输出将类似于:
some text here, some more text here, and even more text here.
假设我希望按如下方式插入文本(注意粗体):
some text here, some more text here, and even more text here.
我该怎么做?
我正在使用 VS2013 创建一个 Word 文档级应用程序。
最佳答案
问题:插入文本的正确方法是什么,可以轻松地为将插入到文档中的文本添加格式(从编程角度来说)?
答案:您需要提取附加文本的范围并设置该范围的样式。这是通过下面提供的函数的 out 参数解决的。
/// <summary>
/// Appends text to a range
/// </summary>
/// <param name="range">The range to append text to.</param>
/// <param name="appendText">The text to append.</param>
/// <param name="appendedRange">The range of the appended text</param>
/// <returns>
/// The range of the combined old text and the appended text
/// </returns>
private Word.Range AppendToRange(Word.Range range, string appendText, out Word.Range appendedRange)
{
// Fetch indexes
object oldStartPosition = range.Start;
object oldEndPosition = range.End;
object newEndPosition = (int)oldEndPosition + appendText.Length;
// Append the text
range.InsertAfter(appendText);
// Define the range of the appended text
appendedRange = Range(ref oldEndPosition, ref newEndPosition);
// Return the range of the new combined range
return Range(ref oldStartPosition, ref newEndPosition);
}
以下代码将在文档末尾附加文本,并允许对文本插入的多个部分进行样式设置:
object startCharacter = 0;
object endCharacter = Globals.ThisDocument.Characters.Count;
Word.Range textRange = Range(ref startCharacter, ref endCharacter);
Word.Range styleRange;
textRange = AppendToRange(textRange , "some text here, ", out styleRange);
styleRange.Bold = 0;
styleRange.Font.Name = "Verdana";
styleRange.Font.Size = 10.0F;
textRange = AppendToRange(textRange , "some more text here, ", out styleRange);
styleRange.Bold = -1;
styleRange.Font.Name = "Times New Roman";
styleRange.Font.Size = 10.0F;
textRange = AppendToRange(textRange , "and even more text here.", out styleRange);
styleRange.Bold = 0;
styleRange.Font.Name = "Verdana";
styleRange.Font.Size = 20.0F;
或者使用原始问题中的代码示例:
// Assumes stMainText is of type Word.Range
Word.Range styleRange;
if (CheckBox1.Checked == true)
{
stMainText = AppendToRange(stMainText, "some text here, ", out styleRange);
// Example styling of the inserted text below
styleRange.Bold = 0;
styleRange.Font.Name = "Verdana";
styleRange.Font.Size = 20.0F;
}
if (CheckBox2.Checked == true)
{
stMainText = AppendToRange(stMainText, "some more text here, ", out styleRange);
// Example styling of the inserted text below
styleRange.Bold = -1;
styleRange.Font.Name = "Times New Roman";
styleRange.Font.Size = 10.0F;
}
if (CheckBox3.Checked == true)
{
stMainText = AppendToRange(stMainText, "and even more text here. ", out styleRange);
// Add necessary styling here
}
关于c# - 生成带有格式的文档文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909464/