更新后的尝试:
我已根据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;
}
}
第一个问题是它向后插入文本,即:
以及更多文字。这里有一些文字,这里有一些文字,
而不是:
这里有一些文字,这里有更多文字,还有更多文字。
第二个问题是原始问题,因为没有添加粗体。我试图让输出成为:
这里有一些文字,这里有更多文字,还有更多文字。
原始问题:
我正在尝试创建一个操作窗格,为用户提供了许多选项。根据选定的选项,特定文本将插入到文档中。我能够非常快速,轻松地创建操作窗格部分和文本插入部分。但插入的文本没有任何格式。
插入文本的正确方法是什么,这样可以轻松地将文本格式添加到文本中(以编程方式)将插入到文档中?
目前,我正在做这样的事情来生成文本并将其插入到文档中,这使得难以应用格式:
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个复选框,则输出类似于:
这里有一些文字,这里有更多文字,还有更多文字。
让我们说我希望插入文本如下(注意粗体):
这里有一些文字,这里有更多文字,还有更多文字。
我该怎么做?
我正在使用VS2013创建word文档级应用程序。
答案 0 :(得分:2)
问题:插入文字的正确方法是什么,这样可以轻松地将文字格式添加到文本中(以编程方式),这些格式会插入到文档中?
答案:您需要提取范围附加文字和样式的范围。这可以通过下面提供的函数的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
}
答案 1 :(得分:0)
试试这个
sbMainText.Append("<b>some more text here</b>");
答案 2 :(得分:0)
这是Example。试试这个:
Globals.ThisDocument.bmkStart.Bold = Globals.ThisDocument.WordTrue;
为了使文本的一部分变为粗体,请example on MSDN。
来自MSDN的代码:
private void BookmarkFormattedText()
{
int WordTrue = 1;
this.Paragraphs[1].Range.InsertParagraphBefore();
this.Paragraphs[1].Range.InsertParagraphBefore();
this.Paragraphs[1].Range.Text = "This is text in the " + "first paragraph.";
this.Paragraphs[1].Range.Words[3].Bold = WordTrue;
Microsoft.Office.Tools.Word.Bookmark bookmark1 =
this.Controls.AddBookmark(this.Paragraphs[2].Range, "bookmark1");
bookmark1.FormattedText = this.Paragraphs[1].Range.Words[3];
}
更新:我修改了klugerama answer
,如下所示:
void FormatText()
{
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.Paragraphs[1].Range.End-1;
Globals.ThisDocument.Paragraphs[1].Range.InsertAfter(entry);
object newRangeEnd = Globals.ThisDocument.Paragraphs[1].Range.End;
var newRange = Globals.ThisDocument.Range(ref newRangeStart, ref newRangeEnd);
if (entry == "some more text here, ")
{
newRange.Bold = 1;
//bookmark this range
Microsoft.Office.Tools.Word.Bookmark bmkStart;
bmkStart = this.Controls.AddBookmark(newRange, "RangeBookMark");
}
else
newRange.Bold = 0;
}
}
输出:
此处有一些文字,此处有更多文字,此处还有更多文字。
答案 3 :(得分:0)
您需要定义不同的Range
对象,并为每个插入设置Bold
属性为True
。由于书签不会自动展开,因此您必须选择插入的文本,并创建具有相同名称的 new 书签,并将所选文本添加到该书签对象。请参阅this。
object True = -1;
foreach (var entry in YourCollectionOfEntries)
{
var bmkRange = Globals.ThisDocument.bmkStart.Range;
object newRangeStart = bmkRange.End;
bmkRange.InsertAfter(entry);
bmkRange.Select();
bmkRange = Globals.ThisDocument.Bookmarks.Add(Globals.ThisDocument.bmkStart.Name, Selection.Range);
object newRangeEnd = bmkRange.End;
var newRange = Globals.ThisDocument.Range(ref newRangeStart, ref newRangeEnd);
if (isBoldForThisEntry)
newRange.Bold = True;
}
答案 4 :(得分:0)
尝试使用html以编程方式构建您想要的文本方式,然后从html文件中创建word文档。
使用 标记附加您想要加粗的内容。
请在html文档中创建单词时参考以下主题 Convert HTML To Word Document