正在生成具有格式的文档文本
本文关键字:文档 文本 有格式 | 更新日期: 2023-09-27 18:05:44
更新尝试:
我尝试了以下基于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文档级应用程序。
问题:插入文本的正确方法是什么?它可以方便地为将插入文档的文本添加格式(按语法(?
答案:您需要提取附加文本的范围并设置该范围的样式。这可以通过下面提供的函数的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
}
试试这个
sbMainText.Append("<b>some more text here</b>");
您需要定义一个不同的Range
对象,并为每个插入将Bold
属性设置为True
。由于书签不会自动展开,因此必须选择插入的文本,然后创建一个同名的新书签,并将所选文本添加到书签对象中。看看这个。
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;
}
尝试使用html以符合语法的方式构建文本,然后用html文件创建一个word文档。
用标记附加要加粗的内容。
请参考以下关于从html文档中创建单词的帖子将HTML转换为Word文档
下面是示例。试试这个:
Globals.ThisDocument.bmkStart.Bold = Globals.ThisDocument.WordTrue;
这里是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;
}
}
输出:
此处有一些文本,此处还有一些文本,甚至此处还有更多文本。