一直以來, word格式的文檔就是文檔屆的毒瘤, 格式復雜,兼容混亂,軟件流氓,奈何怎么也繞不過這個東西。現(xiàn)在有個需求需要用程序操作word文檔,簡單的讀取寫入操作倒是沒問題,涉及到復雜操作就會因為文檔的復雜性造成各種奇奇怪怪的問題,記錄一下生成超鏈接的問題,Python中用python-docx庫來操作word文檔,先安裝好依賴。
下面主要說下操作原理:
1. 文檔結構:Word 文檔采用 Open XML 格式,.docx 文件實際上是一個壓縮的 ZIP 文件,內部包含多個 XML 文件和資源。主要組件包括:
document.xml:文檔的主要內容。
styles.xml:文檔的樣式定義。
numbering.xml:編號樣式。
media/:包含圖像等媒體文件。
_rels/:關系文件,描述不同部分之間的關系。
2. 當使用 python-docx 讀取文檔時主要有兩個步驟:
打開和解壓縮:庫內部使用標準的 ZIP 解壓縮工具打開 .docx 文件,并讀取其中的 XML 文件。
解析 XML:使用 XML 解析庫(如 lxml)解析 XML 內容,提取文檔中的文本、段落、表格、圖像等信息。
3. 對象模型:python-docx 提供了一個面向對象的 API,允許用戶以更高層次的方式與文檔交互。主要對象包括:
Document:表示整個文檔的對象,負責管理段落、表格、圖像等。
Paragraph:表示文檔中的一個段落,可以包含多個文本運行(Run)。
Run:表示段落中的一段文本,具有特定的格式(如字體、大小、顏色等)。
Table:表示文檔中的表格,包含行和單元格。
4. 當修改或創(chuàng)建文檔時主要有下列步驟:
構建對象:用戶通過創(chuàng)建 Document、Paragraph、Run 等對象來構建文檔結構。
設置屬性:可以設置段落的格式、字體、顏色等屬性,所有這些屬性最終都會被轉換成 XML 標簽和屬性。
生成 XML:當用戶調用保存方法時,庫會將對象模型轉換回相應的 XML 結構,并將其寫回到 .docx 文件中。
Relationships:python-docx 使用關系文件(如 _rels/.rels)來管理文檔和嵌入資源(如圖像、其他文檔等)之間的關系。這確保了文檔中的各個部分能夠正確鏈接。
樣式:python-docx 支持 Word 的樣式系統(tǒng),包括段落樣式和字符樣式。通過 styles.xml 文件中的定義,用戶可以對段落和文本應用預定義的樣式。
由于這個庫不直接提供文字超鏈接的操作函數(shù),需要自己實現(xiàn),下面提供一個添加超鏈接的函數(shù),可以直接用:
其他設置全局字體不生效可以用: run.element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋')





暫無評論,快來評論吧!