【python-docx 01】python-docx入門
python-docx是一個用于創建和更新Microsoft Word(.docx)文件的Python庫。官方文檔鏈接
使用前首先通過pip install python-docx
來安裝此庫。
打開一個文檔
from docx import Document
document = Document()
這將打開一個基于默認“模板”的空白文檔,幾乎是您使用內置默認值在Word中啟動新文檔時獲得的文檔。您可以使用python-docx打開并處理現有的Word文檔,但我們暫時先學習最基本的功能。
添加段落
段落是Word中的基礎,它們用于正文,但也用于標題和列表項目。
這是添加一個最簡單的方法:
paragraph = document.add_paragraph('這是一個段落')
可以使用一個段落作為“游標”并在其上方插入一個新段落:
prior_paragraph = paragraph.insert_paragraph_before('你好,')
這允許將段落插入文檔的中間,這在修改現有文檔時很重要,而不是從頭開始修改。
添加標題
一般的文檔,正文文本被分成幾個部分,每個部分都以標題開頭。以下是添加標題的方法:
document.add_heading('這是一個標題')
默認情況下,這會添加頂級標題,Word中顯示為“標題1”。當您需要子節的標題時,只需指定所需的級別為1到9之間的整數:
document.add_heading('這是個標題2', level=2)
如果指定級別0,則添加“標題”段落。這可以很方便的完成了一個相對較短沒有單獨標題頁的文檔。
添加分頁符
如果你需要對文檔進行分頁,你需要下一個文本在一個單獨的頁面,即使你所在頁面不是完整的。
分頁符可以做到這一點:
document.add_page_break()
添加表格
在word里使用的表格如何用python_docx實現呢?
表格通常由行和列組成,python_docx也一樣:
table = document.add_table(rows=2,cols=2)
表具有幾個屬性和方法,您將需要它們來填充它們。
訪問單個單元格可以按照坐標來訪問,例如:
cell = table.cell(0, 1) # 取出第一行第二列的數據
注意,行和列指示是從0開始的,就像python的列表一樣。
你可以通過text來給單元格添加內容:
cell.text = '這是單元格里面的內容'
通常,一次訪問一行單元格更容易,
例如,先從表格中取出一行(.rows[])或是一列(.columns[]),然后就可以使用cells[]像操作列表一樣操作表格。
row = table.rows[1]
row.cells[0].text = '這是單元格里面的內容'
row.cells[1].text = '這是也單元格里面的內容'
在.rows和.columns取出來的數據是可迭代的,這樣你就可以直接在使用for循環對表格進行操作:
for row in table.rows:
for cell in row.cells:
print(cell.text)
如果你想獲取行或列的長度,可以使用len()
row_count = len(table.rows)
col_count = len(table.colums)
你還可以使用增量的方式添加新的行
row = table.add_row()
這對于我們上面提到的可變長度表場景非常方便:
# 獲取表格數據
items = (
(7, '1024', '你好'),
(3, '2042', 'hello'),
(1, '1288', 'Hola'),
)
# 添加一個表格
table = document.add_table(1, 3)
# 填充標題行
heading_cells = table.rows[0].cells
heading_cells[0].text = 'A'
heading_cells[1].text = 'B'
heading_cells[2].text = 'C'
# 給表格填充數據
for item in items:
cells = table.add_row().cells
cells[0].text = item[0]
cells[1].text = item[1]
cells[2].text = item[2]
word的表格有一組預設的表格樣式,python-docx同樣可以指定擺個樣式:
table.style = 'LightShading-Accent1'
通過將鼠標懸停在Word的表樣式庫中的縮略圖上,可以找到表樣式名稱,去掉所有的空格就是樣式名稱,當然首先你要切換到英文環境下。
添加圖片
Word中,你可以通過插入添加圖片,那python-docx是如何做到這一點的?
document.add_picture('path.png')
括號中是圖片的本地路徑。
你也可以使用一個類文件對象,本質上就是打開任何文件對象。如果您從數據庫或網絡檢索圖像,并且不想獲取涉及的文件系統,這就很方便了。
圖像大小
默認情況下,添加的圖像就是原始大小。這通常比你想要的更大。要設置圖像大小,您可以指出圖片的寬高,如英寸或厘米:
from docx.shared import Cm, Inches
document.add_picture('path.png', width=Cm(10))
可以自由地指定寬度和高度。如果僅指定一個,python-docx會通過寬高比保持原圖片比例,讓圖像看起來不拉伸。
段落樣式
word提供了豐富的段落樣式,如下圖所示:
python-docx可以在你創建段落的時候,應用樣式:
document.add_paragraph('這是個帶樣式的段落', style='ListBullet')
你也可以在添加段落后再添加樣式:
paragraph = document.add_paragraph('這是個帶樣式的段落')
paragraph.style = 'ListBullet'
在此示例中,樣式使用樣式ID“ListBullet”指定。
通常,通過去除樣式名稱中出現在Word用戶界面(UI)中的空格來形成樣式ID。
所以風格’列表3號’將被指定為’ListNumber3’。
但是,咱們使用的中文版word就很難受,需要將win系統語言切換到英語,才能查看樣式的英文。
粗體和斜體
關于word中的粗體和斜體大家一定不陌生
有以下四點需要了解:
- 段落樣式可以應用于paragraph對象
- 字符樣式可以應用于run對象
- 鏈接的樣式可以應用于這兩種對象。
- 因此,中間帶有粗體字的段落需要三次運行,一次正常,一個包含該單詞的粗體,另一個正常用于后面的文本。
通過向.add_paragraph()方法提供文本來添加段落時,它將被放入單個run對象中。您可以使用段落上的.add_run()方法添加更多內容:
paragraph = document.add_paragraph('段落 ')
paragraph.add_run('你好')
上面的代碼會產生一個看起來很普通的段落,除非你看一下XML,否則段落文本被分成run對象的地方并不明顯。請注意第一個字符串末尾的尾隨空格。你需要明確在運行的開頭和結尾出現空格的位置,它們不會在run對象之間自動插入。
Run對象有.bold(加粗)和.italic(傾斜)屬性,您可以對run對象進行設置:
paragraph = document.add_paragraph('感謝 ')
run = paragraph.add_run('大家')
run.bold = True # 對‘大家’加粗
paragraph.add_run(' 的照顧')
其產生的文字,看起來像這樣:“感謝 大家 的照顧”
如果你對run對象只進行加粗或者傾斜操作,那可以這么寫:
paragraph.add_run('dolor').bold = True
這不是必須的,但是很方便:
paragraph = document.add_paragraph('感謝 ')
run = paragraph.add_run('大家').bold = True
paragraph.add_run(' 的照顧')
應用字符樣式
除了段落樣式,其中指定一組段落級別設置,Word有字符樣式指定一組run級別的設置。
一般來說,可以將字符樣式視為指定字體,包括其字體,大小,顏色,粗體,斜體等。
像段落樣式,字符樣式必須已經與你在打開的文檔中定義的Document()調用,關于段落樣式。
添加新run對象時可以指定字符樣式:
paragraph = document.add_paragraph('你好 ')
paragraph.add_run('再見', 'Emphasis')
您還可以在運行創建后將樣式應用于run對象。
paragraph = document.add_paragraph('你好 ')
run = paragraph.add_run('再見')
run.style = 'Emphasis'
與段落樣式一樣,樣式名稱與Word UI中顯示的一樣。
智能推薦
Django-01-入門
Django-01-入門 一、Django安裝 首先是安裝Django的框架,Django實際上就是一些包裝好的python庫,方便我們開發網站,直接使用pip命令安裝就行(前提是你已經安裝好了python)。 我們要知道我們使用的python的版本,找到對應的Django版本進行安裝,如下圖所示。 可以使用下面命令查看python版本(我的是python版本3.6) 然后使用使用管理員身份打開命...
01、RabbitMQ之入門
RabbitMQ之入門 一、什么是MQ? 消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已 二、主流MQ框架 MQ框架非常之多,比較流行的有RabbitMq、ActiveMq、ZeroMq、kafka,以及阿里開源的RocketMQ。 區別: 本文主要介紹RabbitMQ 三、應用場景 主要解決異步處理、應...
Vue入門01
NodeJS&npm(了解) 1.安裝nodejs NodeJs下載:https://nodejs.org/en/download/ 安裝完成Node應該自帶了NPM了,在控制臺輸入npm -v查看安裝后的版本 2.idea安裝nodejs插件 設置里Plugins中搜索nodejs插件,idea新版自帶nodejs插件,不需要安裝nodejs插件 3.Npm常用命令 創建前端項目 ①初始...
React_01_入門
React 、Vue、 Angular三大框架對比 React的特點: 1. JSX 2. 組件化 3. 虛擬dom 4. 單向綁定 5. 單向數據流 6. 聲明式 Facebook 于2013年開源 React當前最新版: v16.4.0 關于開源協議 最流行的六種----GPL、BSD、MIT、Mozilla、Apache和LGPL。 React官方教程: https://reactjs.or...
小程序01 入門
準備工作 申請賬號 點擊 https://mp.weixin.qq.com/wxopen/waregister?action=step1 申請賬號,擁有自己的小程序賬號 安裝開發工具 前往 開發者工具下載頁面 下載開發工具并安裝 app.json app.json扮演的了靜態配置的角色,在小程序運行之前就決定了小程序一些表現,需要注意的是小程序是無法在運行過程中去動態更新JSON 配置文件從而發生...
猜你喜歡
【Flutter】入門01
1.Hello world 在程序的開頭我們使用import來引入非本文檔內的資源(工具類,部件等),'package:flutter/material.dart' 這個包則google提供的一套界面的設計規則(也可以說是一套基本部件); void main()是程序的入口,runApp則代表開始運行程序其內的參數表示要展示的部件; Center和Text會在后續進行介紹,這里只簡單說明...
Flyway--01入門
1.簡介 Flyway是一款開源的數據庫版本管理工具,Flyway可以實現自動化的數據庫版本管理,并且能夠記錄數據庫版本更新記錄;通常在項目開始時會針對數據庫進行全局設計,但在開發產品新特性過程中,難免會遇到需要更新數據庫Schema的情況,如:添加新表,添加新字段和約束等,這種情況在實際項目中也常發生。那么,當開發人員完成了對數據庫更的SQL腳本后,如何快速地在其他開發者機器上同步?并且如何在測...
springboot01-入門
簡介 Spring Boot來簡化Spring應用開發,約定大于配置,去繁從簡,just run就能創建一個獨立的,產品級別的應用。 Spring Boot的產生背景,J2EE笨重的開發、繁多的配置,低下的開發效率、復雜的部署流程、第三方技術集成難度大。 Spring Boot是J2EE一站式解決方案,是整個Spring技術棧的一個大整合,Spring Cloud是分布式整體解決方案 優點 快速創...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...