如何使用Python win32com在MS Word中居中显示文本

如何使用Python win32com在MS Word中居中显示文本,python,ms-word,format,win32com,Python,Ms Word,Format,Win32com,我正在自动创建MS Word文档,部分代码利用Win32 COM更新目录和标题。执行此操作的函数如下所示: import win32com.client as win32 def updateHeaderAndTOC(docx_file, headerText): word = win32.gencache.EnsureDispatch("Word.Application") doc = word.Documents.Open(docx_file) word.Activ

我正在自动创建MS Word文档,部分代码利用Win32 COM更新目录和标题。执行此操作的函数如下所示:

import win32com.client as win32

def updateHeaderAndTOC(docx_file, headerText):
    word = win32.gencache.EnsureDispatch("Word.Application")
    doc = word.Documents.Open(docx_file)
    word.ActiveDocument.Sections(1)\
        .Headers(win32.constants.wdHeaderFooterPrimary)\
        .Range.Text=headerText
    doc.TablesOfContents(1).Update()
    doc.Close(SaveChanges=True)
这似乎很有效。问题是,由于某种原因,当标题文本被替换时,标题会左对齐,而不是像我更改标题文本之前那样居中

有人知道怎么做吗

  • 防止发生这种左对齐和/或
  • 文本更改后是否再次居中

  • 总结comments部分的结果,win32com无法将文本集中在标题中。至少在这种情况下,解决方案是在尝试修改文本之前,确保文档中的格式在所有修改的行上都是正确的。如果您的应用程序要求您修改文本,然后在更改标题文本后更改格式(居中、左对齐等),win32com将无能为力…至少在今天是这样。

    使用标题对象的.parations.Alignment属性(定义如下)确实可以对齐标题

    import win32com.client
    
    wrdApp = win32com.client.Dispatch('Word.Application')
    doc = wrdApp.Documents.Open(fullFilePathAndName, False)
    header = doc.Sections(1).Headers(win32com.client.constants.wdHeaderFooterPrimary).Range
    header.Text = "some new header goes here"
    
    #this will align the header content
    header.Paragraphs.Alignment = win32com.client.constants.wdAlignParagraphCenter
    

    我制作了一个带有中间对齐的单段落标题的测试文件。您的代码没有导致我的标题左对齐。在您的目标word文件中,是否使用“中心”选项卡实现了居中?如果是这种情况,您可以在页眉文本的开头添加一个
    \t
    。我要替换的页眉有2行(2个段落),要替换的页眉也有2行/段落。这会有什么不同吗?我无法重现您的问题,将2段标题替换为类似'headerText='foo\rbar\r'的内容。如果在两个居中的标题段落之后有第三个空的左对齐段落,我可以重现这个问题。事实证明,在原始文档中,我将标题的第一行居中,但第二行没有居中。当我替换文本时,替换的标题默认为第二行而不是第一行的格式。这种行为有点古怪,但至少我知道现在发生了什么。谢谢你的帮助@xidgel