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

如何使用PowerShell修改docx中匹配Excel词表的字符串字体颜色

解决方案

需修正的问题点

  1. 原代码打开Word文档时第三个参数设为$true,是只读模式,修改后无法写入保存
  2. 未配置查找替换的格式规则,无法实现仅修改匹配文本颜色的需求
  3. 缺少处理完成后保存、关闭文档的逻辑,修改不会生效
  4. 变量名拼写错误:$MatchWholeWorld应为$MatchWholeWord,会导致整词匹配参数失效

完整修改后的代码

# 加载窗体类用于选择目录
Add-Type -AssemblyName System.Windows.Forms
$fwd = New-Object System.Windows.Forms.FolderBrowserDialog
$null = $fwd.ShowDialog()
$path = $fwd.SelectedPath
$files = Get-ChildItem -Path $path| Where-Object -Property Extension -Match "\.docx?$"

# 导入Excel关键词表,需提前安装ImportExcel模块:Install-Module -Name ImportExcel -Scope CurrentUser
$forbiddenWordsFilePath = "<<Path_To_XLSX>>"
$forbiddenWords= Import-Excel -Path $forbiddenWordsFilePath

$WordApp = New-Object -ComObject Word.Application
$WordApp.visible = $false

# 固定查找替换参数
$MatchCase = $false
$MatchWholeWord = $true # 修正原拼写错误
$MatchWildcards = $false
$MatchSoundsLike = $false
$MatchAllWordForms = $false
$Forward = $true # 设为true从文档开头向后搜索
$Wrap = 1 # wdFindContinue = 1 匹配到文档末尾后继续从头查找
$Format = $true
$wdReplaceAll  = 2

foreach ($file in $files) {
    # 备份原文件
    $fileBackupPath= $file.FullName + "_bck"    
    Copy-Item $file.FullName -Destination $fileBackupPath

    # 打开文档,第三个参数设为$false表示非只读,可写入修改
    $doc = $WordApp.Documents.Open($file.FullName, [type]::Missing, $false)

    foreach ($word in $forbiddenWords){    
        # 配置查找规则
        $find = $doc.Content.Find
        $find.ClearFormatting()
        # 配置替换规则:仅修改字体颜色,不改动原文内容
        $find.Replacement.ClearFormatting()
        $find.Replacement.Font.ColorIndex = 6 # 6对应红色,可自行修改颜色值
        # 执行查找替换,替换内容和查找内容一致,仅修改格式
        $find.Execute(
            $word.Search_Pattern, 
            $MatchCase, 
            $MatchWholeWord, 
            $MatchWildcards, 
            $MatchSoundsLike, 
            $MatchAllWordForms, 
            $Forward, 
            $Wrap, 
            $Format, 
            $word.Search_Pattern, # 替换内容和搜索内容一致,保留原文
            $wdReplaceAll
        )
    }

    # 保存修改并关闭文档
    $doc.Save()
    $doc.Close()
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($doc) | Out-Null
}

# 清理Word COM对象,避免残留进程
$null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$WordApp)
[gc]::Collect()
[gc]::WaitForPendingFinalizers()
Remove-Variable WordApp

颜色自定义说明

代码中ColorIndex为Word内置颜色枚举,常用取值参考:

  • 红色:6
  • 蓝色:2
  • 绿色:4
  • 黄色:7
  • 黑色:1
  • 白色:8
    如果需要使用自定义RGB颜色,可将颜色设置行替换为:
$find.Replacement.Font.Color = [System.Drawing.Color]::FromArgb(红数值,绿数值,蓝数值).ToArgb()

例如设置为橙色RGB(255,165,0),就写为:

$find.Replacement.Font.Color = [System.Drawing.Color]::FromArgb(255,165,0).ToArgb()

内容的提问来源于stack exchange,提问作者JHonrubia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:07