【发布时间】:2020-02-10 23:25:58
【问题描述】:
我有各种具有某些样式且 Style.LanguageID 不正确的文档。 我有一些代码应该遍历文档中的所有样式并将每个 LanguageID 设置为 EnglishUK。
已解决:
oWord = CreateObject("Word.Application")
If oWord IsNot Nothing Then
oWord.Visible = False
If oWord.Documents IsNot Nothing Then
Try
oDocument = oWord.Documents.Open(strFilePath)
Catch ex As Exception
iCouldntOpen += 1
bFailedToOpen = True
End Try
If Not bFailedToOpen Then
If oDocument IsNot Nothing Then
If oDocument.ReadOnly Then
iReadonly += 1
ElseIf oDocument.HasPassword Then
iPassword += 1
Else
For Each s As Style In oDocument.Styles
s.LanguageID = WdLanguageID.wdEnglishUK
Next
' save the document
oDocument.Save()
End If
' close the document
oDocument.Close()
oDocument = Nothing
End If
oWord.Quit()
oWord = Nothing
bFailedToOpen = False
End If
Else
iUnknown += 1
End If
Else
iUnknown += 1
End If
【问题讨论】:
-
能否请您再次检查您发布的错误消息?这没有任何意义(
=的右侧是什么)......另外,我怀疑Style.Count除了错误之外返回任何东西;你的意思是oDocument.Styles.Count?那返回什么? s.NameLocal 有效吗? -
抱歉,我的意思是 oDocument.Styles.Count。 s.NameLocal 确实返回样式名称。错误实际上是“该属性在该对象上不可用。”
-
所以,它适用于某些样式,但不是全部。某些样式没有 LanguageID 吗?如果是这样,您如何检查该属性是否存在?
-
好的,我有一个怀疑,但需要更多信息:你能给我一些样式名称的例子吗?推理:样式可以基于其他样式,并将通过这些链接继承设置。我的想法是该属性不可用,因为它来自潜在风格 - 但这只是一个难以确认的猜测......
-
列表样式(可能会有一种称为“无列表”)没有 LanguageId 属性,您不能分配给其中一种。因此,您可能至少需要测试特定的 wdStyleType 值以避免尝试为这些样式类型分配该属性。
标签: vb.net ms-word styles interop comexception