# -*- coding: utf-8 -*- """插入业绩材料后页码整体后移,用 Word 更新目录域并回存。""" import io import os import sys import time sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") BID = r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目招投标" RESP = os.path.join( BID, "响应文件(完整版)-2026年河南产互联制造业数据智能运营平台研发项目.docx") WD_FORMAT_DOCX = 16 WD_PAGE = 3 def main(): import win32com.client as win32 word = None for i in range(4): try: word = win32.gencache.EnsureDispatch("Word.Application") word.Visible = False word.DisplayAlerts = 0 break except Exception as e: print(f" 启动 Word 重试 {i + 1}/4:{e}") time.sleep(4) if word is None: raise SystemExit("无法启动 Word") t0 = time.time() doc = word.Documents.Open(RESP) try: print(f"打开用时 {time.time() - t0:.0f}s") doc.Fields.Update() for i in range(1, doc.TablesOfContents.Count + 1): doc.TablesOfContents(i).Update() doc.Repaginate() pages = doc.ComputeStatistics(2) # wdStatisticPages print(f"更新完成,总页数 {pages}") print("\n目录前 40 行:") toc = doc.TablesOfContents(1).Range.Text if doc.TablesOfContents.Count else "" for l in [x.strip() for x in toc.split("\r") if x.strip()][:40]: print(f" {l[:72]}") doc.Save() finally: doc.Close(False) word.Quit() print(f"\n总用时 {time.time() - t0:.0f}s") if __name__ == "__main__": main()