无法通过 pywin32 (win32com) 获取 MS Word 的 'HighlightColor'
Can't get MS Word's 'HighlightColor' via pywin32 (win32com)
Python=3.9.6 / pywin32=301 / MS Word ver 2202 build 16.0.14931.20116
The MS document说可以通过Word.Font.highlighColor属性设置'HighlightColor',但是我获取 AttributeError.
import win32com.client as win32
word = win32.gencache.EnsureDispatch("Word.application")
word.Visible = True
doc = word.Documents.Open(r"C:\Users\je\wordcolor\test.docx")
doc = word.ActiveDocument
para = doc.Paragraphs(1) # First paragraph
word.Selection.Start = para.Range.Start
word.Selection.End = para.Range.End
# Getting current highlight color
print(word.Selection.Font.highlightColor) # THIS LINE INVOKES ATTRIBUTE ERROR
# Traceback (most recent call last):
# File "C:\Users\je\wordcolor\test.py", line 13, in <module>
# print(word.Selection.Font.highlightColor)
# File "C:\Users\je\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 524, in __getattr__
# if d is not None: return getattr(d, attr)
# File "C:\Users\je\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 484, in __getattr__
# raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
# AttributeError: '<win32com.gen_py.Microsoft Word 16.0 Object Library._Font instance at 0x2643474563520>' object has no attribute 'highlightColor'
我也试过 HighlightColor 但还是一样。我设置了没反应
另一方面
the document 和 pywin32 之间存在差异。例如,它说它是 Font.color 到 get/set 字体颜色,但实际上我需要 Font.Color(这就是为什么我也尝试了 HighlightColor)。此外,
对于颜色参数,需要一个整数,同时表示应该传递一个十六进制字符串。我怎样才能注意到这些差异?
因为你使用的是win32com
和'Word.Application'对象,需要参考Word对象模型,发现here(不在JavascriptAPI 问题中链接的参考)。在此模型中,Font 对象没有 HighlightColor
属性,因此属性错误。
在 Word VBA 中,您可以通过以下方式更改选择突出显示颜色:
Selection.Range.HighlightColorIndex = wdYellow
因此在Python中查询这个值:
print(word.Selection.Range.HighlightColorIndex)
并使用以下方式设置:
word.Selection.Range.HighlightColorIndex = win32.constants.wdYellow
我提到 VBA 的原因是 Python 中使用的通过 win32com 控制 Word 的命令与 VBA 几乎相同。因此,找出如何实现某事的一种快速方法是在 VBA 中记录一个执行您想要的操作的宏,并检查生成的 VBA 代码以找出对象类型、属性和方法。
Python=3.9.6 / pywin32=301 / MS Word ver 2202 build 16.0.14931.20116
The MS document说可以通过Word.Font.highlighColor属性设置'HighlightColor',但是我获取 AttributeError.
import win32com.client as win32
word = win32.gencache.EnsureDispatch("Word.application")
word.Visible = True
doc = word.Documents.Open(r"C:\Users\je\wordcolor\test.docx")
doc = word.ActiveDocument
para = doc.Paragraphs(1) # First paragraph
word.Selection.Start = para.Range.Start
word.Selection.End = para.Range.End
# Getting current highlight color
print(word.Selection.Font.highlightColor) # THIS LINE INVOKES ATTRIBUTE ERROR
# Traceback (most recent call last):
# File "C:\Users\je\wordcolor\test.py", line 13, in <module>
# print(word.Selection.Font.highlightColor)
# File "C:\Users\je\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 524, in __getattr__
# if d is not None: return getattr(d, attr)
# File "C:\Users\je\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 484, in __getattr__
# raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
# AttributeError: '<win32com.gen_py.Microsoft Word 16.0 Object Library._Font instance at 0x2643474563520>' object has no attribute 'highlightColor'
我也试过 HighlightColor 但还是一样。我设置了没反应
另一方面
the document 和 pywin32 之间存在差异。例如,它说它是 Font.color 到 get/set 字体颜色,但实际上我需要 Font.Color(这就是为什么我也尝试了 HighlightColor)。此外, 对于颜色参数,需要一个整数,同时表示应该传递一个十六进制字符串。我怎样才能注意到这些差异?
因为你使用的是win32com
和'Word.Application'对象,需要参考Word对象模型,发现here(不在JavascriptAPI 问题中链接的参考)。在此模型中,Font 对象没有 HighlightColor
属性,因此属性错误。
在 Word VBA 中,您可以通过以下方式更改选择突出显示颜色:
Selection.Range.HighlightColorIndex = wdYellow
因此在Python中查询这个值:
print(word.Selection.Range.HighlightColorIndex)
并使用以下方式设置:
word.Selection.Range.HighlightColorIndex = win32.constants.wdYellow
我提到 VBA 的原因是 Python 中使用的通过 win32com 控制 Word 的命令与 VBA 几乎相同。因此,找出如何实现某事的一种快速方法是在 VBA 中记录一个执行您想要的操作的宏,并检查生成的 VBA 代码以找出对象类型、属性和方法。