Python 第三方庫之docx

日常上官網?https://python-docx.readthedocs.io/en/latest/

一、安裝

pip install python-docx

二、寫入word

word 中主要有兩種用文本格式等級:塊等級(block-level)和內聯等級(inline-level)word 中大部分內容都是由這兩種等級的對象組成的(其他的諸如眉頁、引腳等,docx 庫的作者還在開發中)

塊等級(block-level):也就是段落

塊對象一般包括:段落(paragraph)、圖片(inline picture)、表(table)、標題(heading)、有序列表(numbered lists)、無序列表(bullets?lists)

段落是 word 文件中的主要塊對象(block-level object),塊等級項(block-level item)主要任務是將文本格式從左邊界向右邊界展示(flows);對于段落而言,邊界就是分段標識,或者是文本的列邊界,列表(table)也是塊對象(block-level object)

內聯等級(inline-level):也就是字體

內聯對象(inline-level object)是塊對象(block-level object)的組成部分,塊對象的所有內容都包含在內聯對象中,一個塊對象由一個或多個內聯對象組成,run 是常用的內聯對象,例如:

p = document.add_paragraph('This is paragraph')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True

這個例子中一個段落(塊對象)包含三個 run(內聯對象),每一個 run 都設置有不同屬性

寫word示例:

# coding:utf-8
import sysfrom docx import Document
from docx.shared import Inchesdef main():reload(sys)sys.setdefaultencoding('utf-8')# 創建文檔對象document = Document()# 新增樣式(第一個參數是樣式名稱,第二個參數是樣式類型:1代表段落;2代表字符;3代表表格)style = doc.styles.add_style('style name 1', 2)# 從樣式庫中選取 'Normal' 樣式,并設置 'Normal' 樣式的字符屬性(font)style = document.styles['Normal']style.font.name = "Microsoft YaHei UI"style.font.size = Pt(50)# 將設置好字符屬性的樣式運用到段落中# p = document.add_paragraph("change font attribution", style = 'Normal')# 從樣式庫中選取 'Heading 2'' 樣式,并設置段落格式(paragraph format)style = document.styles['Heading 2']style.paragraph_format.left_indent = Pt(20)style.paragraph_format.widow_control = True# 將設置好段落格式的 style 運用到段落中# p = document.add_paragraph('This is Heading, level 1', style = style)# 設置文檔標題,中文要用unicode字符串document.add_heading(u'我的一個新文檔',0)from docx.shared import RGBColor,Inches,Ptfrom docx.enum.text import WD_ALIGN_PARAGRAPH# 往文檔中添加段落p = document.add_paragraph('This is a paragraph having some ')p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # WD_ALIGN_PARAGRAPH.LEFT,左對齊;WD_ALIGN_PARAGRAPH.RIGHT,右對齊p.paragraph_format.left_indent = Inches(0.5)  # 設置段落從左開始縮進,使用Inches來衡量p.paragraph_format.right_indent = Pt(20)      # 設置段落從右開始縮進,使用Pt來衡量p.paragraph_format.first_line_indent = Inches(0.5)  # 設置段落第一行縮進,可以與上兩個縮進疊加p.paragraph_format.space_after = Pt(5)    # 設置與上一段間隔 Pt(5)p.paragraph_format.space_before = Pt(10)  # 設置與下一段間隔 Pt(10)p.paragraph_format.line_spacing = Pt(18)  # 行距p_run = p.add_run('xxx')p_run.font.italic = True   # 設置為斜體p_run.font.size = Pt(12)   # 設置字體大小p_run.font.color.rgb = RGBColor(0, 0, 0)  # 設置字體顏色p_run.font.name = u"宋體"  # 設置字體樣式p_run.font._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋體')  # 設置字體樣式p_run.font.underline = False  # 不設置下劃線p_run.font.bold = None  # 設置粗體為繼承上一個字體的格式# 這一類屬性,每個有三種狀態:True 為使用屬性;False 為不使用屬性;None 默認屬性繼承自上一個字體# 添加一級標題document.add_heading(u'一級標題, level = 1',level = 1)document.add_paragraph('Intense quote',style = 'IntenseQuote')# 添加無序列表document.add_paragraph('first item in unordered list',style = 'ListBullet')# 添加有序列表document.add_paragraph('first item in ordered list',style = 'ListNumber')document.add_paragraph('second item in ordered list',style = 'ListNumber')document.add_paragraph('third item in ordered list',style = 'ListNumber')# 添加圖片,并指定寬度document.add_picture('e:/docs/pic.png',width = Inches(1.25))# 添加表格: 1行3列table = document.add_table(rows = 1,cols = 3)# 獲取第一行的單元格列表對象hdr_cells = table.rows[0].cells# 為每一個單元格賦值,值都要為字符串類型hdr_cells[0].text = 'Name'hdr_cells[1].text = 'Age'hdr_cells[2].text = 'Tel'# 為表格添加一行new_cells = table.add_row().cellsnew_cells[0].text = 'Tom'new_cells[1].text = '19'new_cells[2].text = '12345678'# 添加分頁符document.add_page_break()# 往新的一頁中添加段落p = document.add_paragraph('This is a paragraph in new page.')# 保存文檔document.save('e:/docs/demo1.docx')if __name__ == '__main__':main()

運行程序會得到一個下面的文檔

三、讀文檔?

對于文件名是中文的讀取時會報錯

  • doc.paragraphs??# 段落集合
  • doc.tables? ? ? ? ??# 表格集合
  • doc.sections? ? ? # 節??集合
  • doc.styles? ? ? ? ? # 樣式集合
  • doc.inline_shapes?# 內置圖形?等等...

讀取已有的word文檔示例

# coding:utf-8
import sysfrom docx import Documentdef main():reload(sys)sys.setdefaultencoding('utf-8')# 創建文檔對象,寫自己的 word 路徑document = Document('e:/docs/demo2.docx')# 讀取文檔中所有的段落列表ps = document.paragraphs# 每個段落有兩個屬性:style和textps_detail = [(x.text,x.style.name) for x in ps]with open('out.tmp','w+') as fout:fout.write('')# 讀取段落并寫入一個文件with open('out.tmp','a+') as fout:for p in ps_detail:fout.write(p[0] + '\t' + p[1] + '\n\n')# 讀取文檔中的所有段落的列表tables = document.tables# 遍歷table,并將所有單元格內容寫入文件中with open('out.tmp','a+') as fout:for table in tables:for row in table.rows:for cell in row.cells:fout.write(cell.text + '\t')fout.write('\n')if __name__ == '__main__':main()

四、其他事項

1、如果段落中是有超鏈接的,那么段落對象是讀取不出來超鏈接的文本的,需要把超鏈接先轉換成普通文本,方法:全選word文檔的所有內容,按快捷鍵Ctrl+Shift+F9即可。

2、讀取某些文件時會報錯,docx.opc.exceptions.PackageNotFoundError: Package not found。原因:docx無法識別doc,需要先手動或者使用win32com轉換

from win32com import client as wc
import docxdef doSaveAas():word = wc.Dispatch('Word.Application')doc = word.Documents.Open(u'E:\old.doc')        # 目標路徑下的文件doc.SaveAs(u'E:\\new_path.docx', 12, False, "", True, "", False, False, False, False)  # 轉化后路徑下的文件    doc.Close()word.Quit()doSaveAas()

鏈接https://www.cnblogs.com/jiayongji/p/7290410.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454717.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity AI副總裁Danny Lange:如何用AI助推游戲行業?

本文講的是Unity AI副總裁Danny Lange:如何用AI助推游戲行業? ,10月26日,在加州山景城舉辦的ACMMM 2017大會進入正會第三天。在會上,Unity Technology負責AI與機器學習的副總裁Danny Longe進行了題為《Bringing Gaming…

SPI 讀取不同長度 寄存器_SPI協議,MCP2515裸機驅動詳解

SPI概述Serial Peripheral interface 通用串行外圍設備接口是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高…

oracle并發執行max,跪求大量并發執行insert into select語句的方案

現在有數十萬張表要從A庫通過insert into tablename select * from tablenamedblink的方式導入到B庫中。B機上80個cpu,160G內存。希望能夠大量并發執行。怎么寫腳本呢?誰有這方面的經驗,麻煩指點一下。謝謝。下面是我的腳本:#!/us…

20162314 《Program Design Data Structures》Learning Summary Of The First Week

20162314 2017-2018-1 《Program Design & Data Structures》Learning Summary Of The First Week Summary of teaching materials Algorithm analysis is the basic project of the computer science.Increasing function prove that the utilization of the time and spa…

高并發解決方法

2019獨角獸企業重金招聘Python工程師標準>>> 高并發來說,要從實際項目的每一個過程去考慮,頁面,訪問過程,服務器處理,數據庫訪問每個過程都可以處理。(前端-寬帶-后端-DB) 集群&…

MySQL 之 存儲過程

一、初識存儲過程 1、什么是存儲過程 存儲過程是在大型數據庫系統中一組為了完成特定功能的SQL語句集,存儲在數據庫中。存儲過程經過第一次編譯后,再次調用不需要編譯,用戶可以通過指定的存儲過程名和給出一些存儲過程定義的參數來使用它。…

C/C++面試感受和經驗以及面試題收藏

http://topic.csdn.net/u/20080924/15/3b00a84e-970f-4dea-92f2-868c5d1ad825.html 前段時間剛參加了n多公司的C/C軟件工程師的面試,有國企,外企,私企(moto,飛思卡爾,港灣,中國衛星XXX&#xf…

oracle存儲過程季度方法,Oracle存儲過程、觸發器實現獲取時間段內周、月、季度的具體時間...

歡迎技術交流。 QQ:138986722創建table:create table tbmeetmgrinfo(id number primary key, /*主鍵,自動增加 */huiyishi number, /*會議室編號 */STARTTIME varchar2(30), /*會議開始時間 */ENDTIME varchar2(30), /*會議結束時間 */CREATE…

如何root安卓手機_安卓Root+卡開機畫面救磚教程丨以一加手機為例

一加手機買到手已經用了1個多月了,還有很多朋友在問我怎么Root、怎么替換Recovery、怎么安裝Magisk、有時候刷Magisk模塊變磚怎么解救。小編統一整理一下,其他安卓手機也可以參考,很多思路都是通用的。一加手機刷入TWRP并RootTWRP大概是現在安…

Linux用ctrl + r 查找以前(歷史)輸入的命令

在Linux系統下一直用上下鍵查找以前輸入的命令,這個找剛輸入不久的命令還是很方便的,但是比較久遠的命令,用上下鍵效率就不高了。那個history命令也是個花架子,雖然功能多,但不好用,網上找了下,…

敬畏生產環境

生產環境即是運行用戶正在使用的系統環境。有時,一些粗心的用戶會把他們的生產環境交給我們,希望我們來進行變更操作,如部署Agent等。但我們實際上并不清楚這些生產環境有多重要,有時也不清楚我們的變更操作有多危險,其…

unity消息隊列判斷字符串相等有錯誤_Python3十大經典錯誤及解決辦法

◆ ◆ ◆ ◆ ◆接觸了很多Python愛好者,有初學者,亦有轉行人。不論大家學習Python的目的是什么,總之,學習Python前期寫出來的代碼不報錯就是極好的。下面,嚴小樣兒為大家羅列出Python3十大經典錯誤及解決辦法&#xf…

php qmqp 沒有方法,CentOS7 php 安裝 amqp擴展

繼續安裝完 rabbitmq后,安裝phpqmqp擴展1.安裝rabbitmq-c安裝最新版wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gztar zxf rabbitmq-c-0.8.0.tar.gzcd rabbitmq-c-0.8.0./configure --prefix/usr/local/rabbitmq…

如何提高UDP的可靠性

TCP是通過確認機制和超時重傳機制實現可靠傳輸 UDP UDP它不屬于連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結…

CentOS 7鏡像下載

方式一 官網下載 官網鏈接:http://isoredirect.centos.org/centos/7/isos/x86_64/ Actual Country 國內資源 Nearby Countries 周邊國家資源 方式二 阿里云下載 阿里云站點:http://mirrors.aliyun.com/centos/7/isos/x86_64/ 各個版本的ISO鏡像文件…

Docker Dirty Cow逃逸

2019獨角獸企業重金招聘Python工程師標準>>> 在Linux中,有一個功能:VDSO(virtual dvnamic shared object),這是一個小型共享庫,能將內核自動映射到所有用戶程序的地址空間。 Docker逃逸利用Dirty Cow漏洞,將Payload寫到…

九月騰訊,創新工場,淘寶等公司最新面試三十題(更新至10.04)

九月騰訊,創新工場,淘寶等公司最新面試三十題 引言 曾記否,去年的10月份也同此刻一樣,是找工作的高峰期,本博客便是最初由整理微軟等公司面試題而發展而來的。如今,又即將邁入求職高峰期--10月份&#…

oracle 存long,ORACLE中LONG類型字段的存取

Oracle中存取4000字節以上大文本類型可以用此數據類型,其在C#中的讀寫方法如下:注意需要引用 System.Data.OracleClient然后添加命名空間:using System.Data.OracleClientORALCE建庫腳本:CREATE TABLE TE…

創建office一直轉圈_Windows寫字板出現廣告條幅:推薦用戶使用在線版Office

自Windows 95開始,寫字板(Wordpad)應用就一直預裝在Windows操作系統中。它是一款非常簡單的文本編輯器,在功能方面介于記事本和Word之間。近日Rafael Rivera發現微軟正在為這款古老的寫字板添加新功能--在應用中添加廣告橫幅。這個廣告橫幅就是推薦那些寫…

2017軟件工程實踐第二次作業

1、 項目地址:https://github.com/one-piece-zero/sudoku 2、PSP表格記錄的估計耗時 3、解題思路: 在拿到這個題目的時候,我最早想到的是大一下學期做的程序語言綜合設計實踐中的N皇后問題,這兩個題目之間有許多的類似之處&#x…