| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # -*- 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()
|