本文就將介紹一個(gè)強(qiáng)大的庫(kù)xlsxwriter
缸逃。來(lái)學(xué)習(xí)如何用原生的方式操作Excel!
首先還是來(lái)簡(jiǎn)單了解下這三個(gè)庫(kù)之間的區(qū)別
openpyxl
:只允許讀取和寫(xiě)入.xlsx
格式文件并進(jìn)行增刪改增查粱锐。xlwings
:允許讀取和寫(xiě)入.xlsx
和.xls
兩種格式文件并進(jìn)行增刪改查。xlsxwriter
:只允許寫(xiě)入.xlsx
格式的文件鸠姨。
比較三者择膝,你可能會(huì)覺(jué)得xlsxwriter
這個(gè)庫(kù)也太不行了吧?其實(shí)不是的油湖,在寫(xiě)入這方面前兩個(gè)庫(kù)比不上它巍扛,它的精華在于寫(xiě)入(多張樣式圖表、圖片乏德、表格樣式修改等)撤奸。話(huà)不多說(shuō),下面開(kāi)始講解喊括!
簡(jiǎn)介
xlsxwriter
是用于創(chuàng)建Excel XLSX文件的Python模塊胧瓜,可用于將文本、數(shù)字瘾晃、公式和超鏈接寫(xiě)入Excel2007 + XLSX文件中的多個(gè)工作表贷痪。它支持格式化等功能”奈螅可以說(shuō)**除了Excel本身劫拢,就屬這個(gè)功能最齊全了肉津。
它的缺點(diǎn)就是不支持讀取和修改,它只能創(chuàng)建新的文件舱沧,如果讀者想完美讀取功能的話(huà)妹沙,可以結(jié)合xlsxreader
來(lái)實(shí)現(xiàn),兩者結(jié)合可謂真正完整的Excel+XLSX再現(xiàn)熟吏。
其次距糖,它不支持XLS文件的寫(xiě)入,XLS文件是一種二進(jìn)制格式的文件牵寺。如果讀者想創(chuàng)建XLS格式文件的話(huà)可以參考xlwt
模塊悍引。
安裝與概覽
安裝很簡(jiǎn)單,沒(méi)有什么特別要注意的帽氓,直接在命令行/終端中安裝即可
pip install XlsxWriter
在正式講解之前我們需要簡(jiǎn)單了解Xlsxwriter
的基本流程如下
常用操作拆解
下面我將對(duì)操作Excel時(shí)常見(jiàn)的幾個(gè)操作進(jìn)行舉例講解
一趣斤、創(chuàng)建Excel文件
先導(dǎo)入模塊而后使用Workbook()
構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)新的工作簿對(duì)象。Workbook()
接受一個(gè)非可選參數(shù)---我們創(chuàng)建文件的文件名黎休。
import xlsxwriter
f = xlsxwriter.Workbook()
二浓领、創(chuàng)建工作表
默認(rèn)情況下,Excel文件中的工作表按代碼執(zhí)行順序名稱(chēng)依次為Sheet1势腮、Sheet2等联贩。但是我們也可以指定一個(gè)名稱(chēng),如上我們?cè)诤瘮?shù)內(nèi)加入了Data捎拯。
三泪幌、寫(xiě)入單個(gè)數(shù)據(jù)
如果對(duì)單個(gè)單元格進(jìn)行寫(xiě)入數(shù)據(jù)用如下語(yǔ)法:
注意的是在XlsxWriter中,row行和col列的索引為零也即工作表的第一個(gè)單元格A1為(0,0)
如果我們需要寫(xiě)入多行多列數(shù)據(jù)的話(huà)署照,可以用for循環(huán)座菠。在這里舉個(gè)例子呈現(xiàn)。
效果如下:
四藤树、寫(xiě)入一整行列數(shù)據(jù)
第一行代碼為按行插入且從A1單元格開(kāi)始浴滴,data為要寫(xiě)入的數(shù)據(jù)(格式為一個(gè)列表),bold為單元格樣式岁钓。第二行代碼與之不同的是按列插入升略。
五、設(shè)置單元格樣式
在上方的寫(xiě)入行列數(shù)據(jù)中我們用到的bold參數(shù)屡限,這是一個(gè)調(diào)節(jié)單元格樣式的參數(shù)品嚣,常用的格式如上代碼。
六钧大、插入圖片
插入圖片是xlsxwriter
矚目的地方翰撑,接下來(lái)將分為小部分詳細(xì)講解
第一個(gè)參數(shù)是你要指定哪個(gè)單元格插入圖片,第二個(gè)參數(shù)是存放圖片的絕對(duì)路徑啊央。
6.1 插入超鏈接
row和col參數(shù)都是設(shè)置位置信息的眶诈。
6.2 插入圖表
插入圖表是xlsxwriter
模塊的最大閃光點(diǎn)涨醋,這里我將詳細(xì)介紹插入圖表的代碼及其解釋。
首先逝撬,先熟悉插入圖表的代碼
workbook.add_chartsheet()
函數(shù)是最經(jīng)典的插入圖表函數(shù)浴骂,字典里的第一個(gè)鍵type參數(shù)指的是放入的圖表類(lèi)型。而第二個(gè)鍵指的是某些圖表類(lèi)型中的圖表子類(lèi)型宪潮。
支持的圖表類(lèi)型有以下:
“
area
:創(chuàng)建一個(gè)Area(實(shí)線(xiàn))樣式表溯警。bar
:創(chuàng)建條形樣式(轉(zhuǎn)置直方圖)圖表。column
:創(chuàng)建列樣式(直方圖)圖表狡相。line
:創(chuàng)建線(xiàn)型圖表梯轻。pie
:創(chuàng)建一個(gè)餅圖樣式圖表。doughnut
:創(chuàng)建一個(gè)甜甜圈樣式表尽棕。scatter
:創(chuàng)建散點(diǎn)圖樣式圖檩淋。stock
:創(chuàng)建一個(gè)股票樣式圖。radar
:創(chuàng)建雷達(dá)樣式表萄金。
”
設(shè)置了圖表類(lèi)型接下來(lái)就是插入數(shù)據(jù),插入數(shù)據(jù)我們用chart.add_series(options)
函數(shù)媚朦。
這里的options是以字典形式的圖表數(shù)據(jù)氧敢,在Excel中圖表系列是一組信息(值、軸標(biāo)簽询张、格式等)孙乖。
接下來(lái)就是將創(chuàng)建好的chart對(duì)象放入倒Excel表格中
insert_chart()
函數(shù)是將圖表插入到工作表指定的位置,第一個(gè)參數(shù)為單元格位置信息份氧,第二個(gè)參數(shù)為選定的圖表唯袄。
我們用一個(gè)例子將上述三個(gè)函數(shù)結(jié)合,并畫(huà)一個(gè)條形圖
效果如下:
上述例子中的插入數(shù)據(jù)我們運(yùn)用了和第一個(gè)例子不一樣的for循環(huán)插入蜗帜,運(yùn)用的是worksheet.write_column()
對(duì)整行整列進(jìn)行數(shù)據(jù)添加恋拷。
注意:如果表格里的圖表沒(méi)有顯示則在這代碼里改worksheet = workbook.add_worksheet()
,刪除里面的參數(shù)厅缺,原因是Excel的版本問(wèn)題蔬顾。
在chart.add_series()
函數(shù)中我們用到的字典類(lèi)型格式為:{'values': '=工作表名!$列對(duì)應(yīng)字母$行對(duì)應(yīng)數(shù)字:$列對(duì)應(yīng)字母$行對(duì)應(yīng)數(shù)字'}
。在這里湘捎,列對(duì)應(yīng)字母和行對(duì)應(yīng)數(shù)字可以看圖片中诀豁,我們需要的是ABC三列中的1-5行數(shù)值,故我們這里引用3個(gè)添加函數(shù)窥妇。
6.3 設(shè)置x軸與y軸屬性
第一個(gè)參數(shù)name
是指軸的名稱(chēng)舷胜,name_font
設(shè)置x軸的字體屬性,這里設(shè)置了粗體和大小活翩。num_font
指軸編號(hào)(也即如圖中x軸下方的1234)的字體屬性這里設(shè)置了斜體烹骨。
同理翻伺,y軸、子圖xy軸的設(shè)置也是一樣的展氓,區(qū)別在于將代碼中的x換成對(duì)應(yīng)的y和x穆趴。
我們?cè)谏鲜?中的代碼加上這段代碼看效果:編號(hào)變斜體、有了標(biāo)題并且是粗體遇汞。
6.4 合并兩個(gè)不同類(lèi)型的圖表
合并圖表用combine()
函數(shù)
效果:
6.5 設(shè)置圖表尺寸
用set_size()
函數(shù)來(lái)設(shè)置圖表尺寸未妹。
函數(shù)里面有六個(gè)參數(shù):width
、height
空入,x_offset
,y_offset
前兩個(gè)代表寬度與高度是以像素為單位络它,默認(rèn)的圖表的寬度*高度為480 x 288像素。
后兩個(gè)參數(shù)是設(shè)置類(lèi)型圖片在整個(gè)chart圖表區(qū)域中移動(dòng)歪赢。含義用一張表格來(lái)說(shuō)明
參數(shù) | 正負(fù) | 意義 |
---|---|---|
x_offset | 正 | 向右偏移 |
x_offset | 負(fù) | 向左偏移 |
y_offset | 正 | 向下偏移 |
y_offset | 負(fù) | 向上偏移 |
6.6 設(shè)置圖表標(biāo)題
用set_title()
函數(shù)
name
指標(biāo)題化戳;overlay
代表允許標(biāo)題覆蓋到圖表上通常與layout
一起使用。layout
以圖表相對(duì)單位設(shè)置標(biāo)題的位置(x, y)埋凯。
這里我們只運(yùn)用第一行代碼chart.set_title({'name': 'Zaoqi Python title'})
將它放入到4中代碼的combine
函數(shù)上面点楼。得到效果如下:
6.7 設(shè)置圖例
用set_legend()
函數(shù)設(shè)置圖例屬性。
none
:關(guān)閉圖例白对;默認(rèn)是開(kāi)啟的掠廓。position
:圖例的位置。font
:圖例的字體屬性甩恼。delete_series
:刪除指定圖例蟀瞧,以列表呈現(xiàn)。
6.8 設(shè)置圖表樣式
用set_style(num)
函數(shù)条摸,用于將圖表的樣式設(shè)置為Excel中“設(shè)計(jì)”選項(xiàng)卡上可用的48種內(nèi)置樣式之一悦污。參數(shù)num就是48種內(nèi)置樣式之一。
我們這里把num改成6也就是樣式6钉蒲,同樣放在4種代碼combine
那段代碼上面切端。效果如下!
6.9 設(shè)置圖表區(qū)域
用set_chartarea()
函數(shù)來(lái)設(shè)置圖表區(qū)域的屬性圖表區(qū)域,也就是圖表背后的區(qū)域顷啼。
fill
:設(shè)置圖表區(qū)域的實(shí)心填充屬性帆赢,例如顏色。
10线梗、在圖表下方添加數(shù)據(jù)表
用set_table()
函數(shù)在水平軸下方添加一個(gè)數(shù)據(jù)表椰于。
效果如下:
七、關(guān)閉Excel文件
在上面例子中都可以看到最后都調(diào)用了這句代碼
workbook.close()
小結(jié)
至此仪搔,有關(guān)xlsxwriter
的常用操作就基本介紹完畢瘾婿。
如果想要徹底理解,還需要自己動(dòng)手執(zhí)行一遍上面的各部分代碼來(lái)體會(huì),也希望大家能夠在不同的場(chǎng)景下偏陪,靈活運(yùn)用不同的Python庫(kù)抢呆。