You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于C# VSTO实现Word编辑模式专属自定义下划线及文字色功能问询

解决方案:C# VSTO实现Word编辑模式专属下划线与着色

核心思路

利用Word的隐藏格式属性结合VSTO事件监听,实现自定义格式仅在编辑视图可见,打印/导出时自动隐藏;同时通过自定义样式区分专属格式与常规格式,避免功能冲突。


一、初始化自定义样式(区分专属与常规格式)

插件启动时创建两个独立的字符样式,分别用于编辑模式专属下划线和着色:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    // 创建编辑模式专属下划线样式
    if (!this.Application.Styles["CustomEditUnderline"].Exists)
    {
        Style underlineStyle = this.Application.Styles.Add("CustomEditUnderline", WdStyleType.wdStyleTypeCharacter);
        underlineStyle.Font.Underline = WdUnderline.wdUnderlineWavy;
        underlineStyle.Font.UnderlineColor = WdColor.wdColorBlue; // 可由用户自定义颜色
        underlineStyle.Font.Hidden = 1; // 标记为隐藏格式,默认不打印/导出
    }

    // 创建编辑模式专属着色样式
    if (!this.Application.Styles["CustomEditColor"].Exists)
    {
        Style colorStyle = this.Application.Styles.Add("CustomEditColor", WdStyleType.wdStyleTypeCharacter);
        colorStyle.Font.Color = WdColor.wdColorOrange; // 可由用户自定义颜色
        colorStyle.Font.Hidden = 1; // 标记为隐藏格式
    }

    // 绑定核心事件
    this.Application.DocumentBeforePrint += Application_DocumentBeforePrint;
    this.Application.DocumentBeforeSave2 += Application_DocumentBeforeSave2;
    this.Application.WindowViewChange += Application_WindowViewChange;
}

二、实现用户添加专属格式的功能

在Word功能区添加自定义按钮,让用户选中文字后一键应用专属格式:

// 应用编辑模式专属下划线
private void btnAddCustomUnderline_Click(object sender, RibbonControlEventArgs e)
{
    Word.Selection sel = this.Application.Selection;
    if (sel != null && !sel.IsEmpty)
    {
        sel.Style = this.Application.Styles["CustomEditUnderline"];
        // 编辑视图下自动显示隐藏格式
        ShowEditModeFormats();
    }
}

// 应用编辑模式专属着色
private void btnAddCustomColor_Click(object sender, RibbonControlEventArgs e)
{
    Word.Selection sel = this.Application.Selection;
    if (sel != null && !sel.IsEmpty)
    {
        sel.Style = this.Application.Styles["CustomEditColor"];
        // 编辑视图下自动显示隐藏格式
        ShowEditModeFormats();
    }
}

// 辅助方法:编辑视图下显示隐藏格式
private void ShowEditModeFormats()
{
    var viewType = this.Application.ActiveWindow.View.Type;
    if (viewType == WdViewType.wdPrintLayoutView ||
        viewType == WdViewType.wdWebLayoutView ||
        viewType == WdViewType.wdNormalView)
    {
        this.Application.ActiveWindow.View.ShowHiddenText = true;
    }
}

三、监听视图切换与打印/导出事件,自动控制格式显示

  1. 视图切换时,自动切换格式可见性:
private void Application_WindowViewChange(Word.Window Wn, WdViewType ViewType)
{
    switch (ViewType)
    {
        // 编辑视图:显示专属格式
        case WdViewType.wdPrintLayoutView:
        case WdViewType.wdWebLayoutView:
        case WdViewType.wdNormalView:
            Wn.View.ShowHiddenText = true;
            break;
        // 非编辑视图(打印预览、阅读视图等):隐藏专属格式
        case WdViewType.wdPrintPreview:
        case WdViewType.wdReadingView:
        case WdViewType.wdOutlineView:
            Wn.View.ShowHiddenText = false;
            break;
    }
}
  1. 打印前临时隐藏专属格式,打印后恢复:
private void Application_DocumentBeforePrint(Word.Document Doc, ref bool Cancel)
{
    bool originalState = this.Application.ActiveWindow.View.ShowHiddenText;
    // 打印前隐藏专属格式
    this.Application.ActiveWindow.View.ShowHiddenText = false;

    // 打印完成后恢复原状态
    this.Application.DocumentAfterPrint += (s, args) =>
    {
        this.Application.ActiveWindow.View.ShowHiddenText = originalState;
        this.Application.DocumentAfterPrint -= (s, args);
    };
}
  1. 导出PDF前临时隐藏专属格式,保存后恢复:
private void Application_DocumentBeforeSave2(Word.Document Doc, ref bool SaveAsUI, ref WdSaveFormat Format, ref bool Cancel)
{
    if (Format == WdSaveFormat.wdFormatPDF)
    {
        bool originalState = this.Application.ActiveWindow.View.ShowHiddenText;
        // 导出PDF前隐藏专属格式
        this.Application.ActiveWindow.View.ShowHiddenText = false;

        // 保存完成后恢复原状态
        this.Application.DocumentAfterSave += (s, args) =>
        {
            this.Application.ActiveWindow.View.ShowHiddenText = originalState;
            this.Application.DocumentAfterSave -= (s, args);
        };
    }
}

四、与常规格式的兼容性说明

  • 专属格式使用独立自定义样式,完全区分于Word「主页」选项卡的常规下划线/着色样式,用户可正常使用常规功能,两者互不干扰。
  • 若需修改专属格式的颜色,可通过插件设置界面动态调整样式的UnderlineColor或Font.Color属性。

内容的提问来源于stack exchange,提问作者Alexandru Romînu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:43:11