Python玩轉(zhuǎn)Excel神器xlsxwriter詳解

本文就將介紹一個(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è)功能最齊全了肉津。

image.png

它的缺點(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的基本流程如下

image.png

常用操作拆解

下面我將對(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捎拯。

image.png

三泪幌、寫(xiě)入單個(gè)數(shù)據(jù)

如果對(duì)單個(gè)單元格進(jìn)行寫(xiě)入數(shù)據(jù)用如下語(yǔ)法:

image.png

注意的是在XlsxWriter中,row行和col列的索引為零也即工作表的第一個(gè)單元格A1為(0,0)

如果我們需要寫(xiě)入多行多列數(shù)據(jù)的話(huà)署照,可以用for循環(huán)座菠。在這里舉個(gè)例子呈現(xiàn)。

image.png

效果如下:


image.png

四藤树、寫(xiě)入一整行列數(shù)據(jù)

image.png

第一行代碼為按行插入且從A1單元格開(kāi)始浴滴,data為要寫(xiě)入的數(shù)據(jù)(格式為一個(gè)列表),bold為單元格樣式岁钓。第二行代碼與之不同的是按列插入升略。

五、設(shè)置單元格樣式

image.png

在上方的寫(xiě)入行列數(shù)據(jù)中我們用到的bold參數(shù)屡限,這是一個(gè)調(diào)節(jié)單元格樣式的參數(shù)品嚣,常用的格式如上代碼。

六钧大、插入圖片

插入圖片是xlsxwriter矚目的地方翰撑,接下來(lái)將分為小部分詳細(xì)講解

image.png

第一個(gè)參數(shù)是你要指定哪個(gè)單元格插入圖片,第二個(gè)參數(shù)是存放圖片的絕對(duì)路徑啊央。

6.1 插入超鏈接

image.png

row和col參數(shù)都是設(shè)置位置信息的眶诈。

6.2 插入圖表

插入圖表是xlsxwriter模塊的最大閃光點(diǎn)涨醋,這里我將詳細(xì)介紹插入圖表的代碼及其解釋。

首先逝撬,先熟悉插入圖表的代碼

image.png

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表格中

image.png

insert_chart()函數(shù)是將圖表插入到工作表指定的位置,第一個(gè)參數(shù)為單元格位置信息份氧,第二個(gè)參數(shù)為選定的圖表唯袄。

我們用一個(gè)例子將上述三個(gè)函數(shù)結(jié)合,并畫(huà)一個(gè)條形圖

image.png

效果如下:


image.png

上述例子中的插入數(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軸屬性

image.png

第一個(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)題并且是粗體遇汞。

image.png

6.4 合并兩個(gè)不同類(lèi)型的圖表

合并圖表用combine()函數(shù)

image.png

效果:

image.png

6.5 設(shè)置圖表尺寸

set_size()函數(shù)來(lái)設(shè)置圖表尺寸未妹。

image.png

函數(shù)里面有六個(gè)參數(shù):widthheight空入,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ù)

image.png

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ù)上面点楼。得到效果如下:

image.png

6.7 設(shè)置圖例

set_legend()函數(shù)設(shè)置圖例屬性。

image.png

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那段代碼上面切端。效果如下!

image.png

6.9 設(shè)置圖表區(qū)域

set_chartarea()函數(shù)來(lái)設(shè)置圖表區(qū)域的屬性圖表區(qū)域,也就是圖表背后的區(qū)域顷啼。

image.png

fill:設(shè)置圖表區(qū)域的實(shí)心填充屬性帆赢,例如顏色。

10线梗、在圖表下方添加數(shù)據(jù)表

set_table()函數(shù)在水平軸下方添加一個(gè)數(shù)據(jù)表椰于。

效果如下:


image.png

七、關(guān)閉Excel文件

在上面例子中都可以看到最后都調(diào)用了這句代碼

workbook.close()

小結(jié)

至此仪搔,有關(guān)xlsxwriter的常用操作就基本介紹完畢瘾婿。

如果想要徹底理解,還需要自己動(dòng)手執(zhí)行一遍上面的各部分代碼來(lái)體會(huì),也希望大家能夠在不同的場(chǎng)景下偏陪,靈活運(yùn)用不同的Python庫(kù)抢呆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笛谦,隨后出現(xiàn)的幾起案子抱虐,更是在濱河造成了極大的恐慌,老刑警劉巖饥脑,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恳邀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡灶轰,警方通過(guò)查閱死者的電腦和手機(jī)谣沸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笋颤,“玉大人乳附,你說(shuō)我怎么就攤上這事“槌危” “怎么了赋除?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)非凌。 經(jīng)常有香客問(wèn)我举农,道長(zhǎng),這世上最難降的妖魔是什么清焕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮祭犯,結(jié)果婚禮上秸妥,老公的妹妹穿的比我還像新娘。我一直安慰自己沃粗,他們只是感情好粥惧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著最盅,像睡著了一般突雪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涡贱,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天咏删,我揣著相機(jī)與錄音,去河邊找鬼问词。 笑死督函,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辰狡,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锋叨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宛篇?” 一聲冷哼從身側(cè)響起娃磺,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叫倍,沒(méi)想到半個(gè)月后偷卧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡段标,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年涯冠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逼庞。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛇更,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赛糟,到底是詐尸還是另有隱情派任,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布璧南,位于F島的核電站掌逛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏司倚。R本人自食惡果不足惜豆混,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望动知。 院中可真熱鬧皿伺,春花似錦、人聲如沸盒粮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春巡扇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讼油。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呢簸,地道東北人汁讼。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓淆攻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親嘿架。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓶珊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355