使用Powershell(或VBA)将Word样式字体设置为默认主题字体

时间:2019-07-05 14:03:28

标签: vba powershell ms-word

我正在编写一个脚本来修改Word文档中的样式。对于每种样式,我都希望将字体设置为由文档主题确定的默认“正文”或“标题”样式。

将样式设置为特定字体很容易:

# Powershell
$word = New-Object -ComObject Word.Application
$word.Documents.Add()
$doc = $word.Documents | Select-Object -first 1

$doc.Styles["Normal"].Font.Name = "Calibri"

如何将样式设置为“正文”或“标题”字体?

2 个答案:

答案 0 :(得分:1)

您可以访问ThemeFontScheme中的DocumentTheme。有两种字体属性:MajorFont用于标题,MinorFont用于正文。每个对象都返回一个ThemeFonts对象,该对象是three language fonts的集合:msoThemeLatin用于拉丁字体,msoThemeEastAsianmsoThemeComplexScript。通常,其中的一个仅根据特定字体返回值。例如,Calibri只有一个拉丁字体。

我将假定您的主题使用拉丁字体。在VBA中,您可以执行以下操作:

doc.Styles("Normal").Font.Name = doc.DocumentTheme.ThemeFontScheme.MajorFont(msoThemeLatin).Name

获取标题字体名称。您可以相应地调整“正文”字体。如果您的主题字体可能没有拉丁字体,则可以遍历.MajorFont返回的集合中的每个项目,以检查哪个是非空字符串。

答案 1 :(得分:0)

由于.Minorfont(...).Name只是一个字符串,因此引用的代码将Normal样式更改为当前Body主题字体的任何样式。但是,如果您随后将Body主题字体定义更改为其他字体,则Normal的外观不会随之改变。设置法线以使其跟随主体的更改:

ActiveDocument.Styles("Normal").Font.Name = "+Body"  

(类似于“ +标题”。) 普通字体的.Font.Name仍将是特定的字体名称,例如“ Calibri”。控制到+ Body的链接的设置必须位于其他位置...我不知道如何通过静态字体,通过+ Body恰好也是“ Calibri”来测试Normal是否设置为“ Calibri”。 / p>