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

使用PowerShell修改Word文档中形状内的字体

解决PowerShell修改Word文档所有字体(含文本框、目录)的问题

你的脚本仅能修改正文是因为Word里的文本框属于独立的Shapes对象,目录则是特殊的域(Field)结构,需要单独处理。以下是修改后的完整脚本,覆盖正文、文本框、目录的字体修改:

$WordExts = '.docx','.doc','.docm'
$Word = New-Object -ComObject Word.Application
$Word.Visible = $false
$folder = Get-ChildItem $PSScriptRoot | Where-Object {$_.Extension -in $WordExts}

foreach ($file in $folder){
    Write-Host "处理文件: $($file.FullName)"
    $worddoc = $Word.Documents.Open($file.FullName)

    # 1. 修改正文所有文本字体
    $worddoc.Select()
    $Word.Selection.Font.Name = "Arial"

    # 2. 修改所有文本框内的字体
    foreach ($shape in $worddoc.Shapes) {
        if ($shape.HasTextFrame -and $shape.TextFrame.HasText) {
            $shape.TextFrame.TextRange.Font.Name = "Arial"
        }
    }

    # 3. 修改目录字体(含更新目录+修改样式)
    foreach ($field in $worddoc.Fields) {
        if ($field.Type -eq [Microsoft.Office.Interop.Word.WdFieldType]::wdFieldTOC) {
            # 可选:更新目录内容到最新状态
            $field.Update()
            # 修改目录结果的字体
            $field.Result.Font.Name = "Arial"
            # 更彻底:修改目录对应的样式(影响所有同级目录项)
            $worddoc.Styles.Item("目录 1").Font.Name = "Arial"
            $worddoc.Styles.Item("目录 2").Font.Name = "Arial"
            $worddoc.Styles.Item("目录 3").Font.Name = "Arial"
        }
    }

    # 可选:修改页眉页脚字体
    foreach ($section in $worddoc.Sections) {
        # 处理页眉
        foreach ($header in $section.Headers) {
            if ($header.Range.Text.Trim() -ne "") {
                $header.Range.Font.Name = "Arial"
            }
        }
        # 处理页脚
        foreach ($footer in $section.Footers) {
            if ($footer.Range.Text.Trim() -ne "") {
                $footer.Range.Font.Name = "Arial"
            }
        }
    }

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

$Word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Word) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

关键部分说明:

  • 文本框处理:遍历文档的Shapes集合,判断每个形状是否包含可编辑文本框,通过TextFrame.TextRange直接修改字体。
  • 目录处理:
    • 先识别目录域(wdFieldTOC类型),可选调用Update()刷新目录内容;
    • 直接修改目录结果的字体,或者修改对应的目录样式(推荐,因为样式会统一控制所有同级别目录项的格式)。
  • COM对象释放:添加了ReleaseComObject和垃圾回收操作,避免Word进程残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:31:35