c# - 生成带有格式的文档文本

标签 c# visual-studio-2013 vsto word-2010

更新的尝试:

我已经根据 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/

相关文章:

c# - System.Net.HttpWebRequest.GetResponse() 错误 "ResponceSystem.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel"

c# - ASP.NET 网络 API 2 : ExceptionLogger and Exception Handler

c# - 统一注册相互覆盖

c++ - 如何设置 NupenGL 并将其包含在 Visual Studio 项目中

c++ - 相当于 __attribute__ 的 Visual Studio ((warn_unused_result))

c# - 将 Windows 窗体文本框输入值与数据库 C# SQL 中的值进行比较

c# - 在开发人员命令提示符下运行控制台应用程序

vsto - VSTO 运行时是否随 MS Office 安装一起安装?

.net - VSTO Outlook 2007 唯一邮件 ID

c# - GetDataObject 请求的剪贴板操作未成功 0x800401D0