大家好,在之前的Python辦公自動化系列文章中,我們已經介紹了兩個Python操作Excel的庫openpyxl與xlwings,并且相信大家已經了解這兩者之間的異同,
但是在Python中操作Excel庫可不止這兩個,本文就將介紹另一個強大的庫xlsxwriter,來學習如何用原生的方式操作Excel!
首先還是來簡單了解下這三個庫之間的區別
- openpyxl:只允許讀取和寫入.xlsx格式檔案并進行增刪改增查,
- xlwings:允許讀取和寫入.xlsx和.xls兩種格式檔案并進行增刪改查,
- xlsxwriter:只允許寫入.xlsx格式的檔案,
比較三者,你可能會覺得xlsxwriter這個庫也太不行了吧?其實不是的,在寫入這方面前兩個庫比不上它,它的精華在于寫入(多張樣式圖表、圖片、表格樣式修改等),話不多說,下面開始講解!
簡介
xlsxwriter是用于創建Excel XLSX檔案的Python模塊,可用于將文本、數字、公式和超鏈接寫入Excel2007 + XLSX檔案中的多個作業表,它支持格式化等功能,可以說除了Excel本身,就屬這個功能最齊全了,
它的缺點就是不支持讀取和修改,它只能創建新的檔案,如果讀者想完美讀取功能的話,可以結合xlsxreader來實作,兩者結合可謂真正完整的Excel+XLSX再現,
其次,它不支持XLS檔案的寫入,XLS檔案是一種二進制格式的檔案,如果讀者想創建XLS格式檔案的話可以參考xlwt模塊,
安裝與概覽
安裝很簡單,沒有什么特別要注意的,直接在命令列/終端中安裝即可
pip install XlsxWriter
在正式講解之前我們需要簡單了解Xlsxwriter的基本流程如下
常用操作拆解
下面我將對操作Excel時常見的幾個操作進行舉例講解
一、創建Excel檔案
先匯入模塊而后使用Workbook()建構式來創建一個新的作業簿物件,Workbook()接受一個非可選引數---我們創建檔案的檔案名,
import xlsxwriter
f = xlsxwriter.Workbook()
二、創建作業表
默認情況下,Excel檔案中的作業表按代碼執行順序名稱依次為Sheet1、Sheet2等,但是我們也可以指定一個名稱,如上我們在函式內加入了Data,
worksheet1 = workbook.add_worksheet()
#worksheet2 = workbook.add_worksheet('Data')
三、寫入單個資料
如果對單個單元格進行寫入資料用如下語法:
worksheet.write(row, col, some_data)
注意的是在XlsxWriter中,row行和col列的索引為零也即作業表的第一個單元格A1為(0,0)
如果我們需要寫入多行多列資料的話,可以用for回圈,在這里舉個例子呈現,
import xlsxwriter
workbook = xlsxwriter.Workbook('data.xlsx')
worksheet = workbook.add_worksheet('早起Python')
#寫入資料以元組套串列形式
data = https://www.cnblogs.com/python147/archive/2021/02/18/(
['春天',20],
['夏天',30],
['秋天',25],
['冬天',10],
)
#設定初始的輸入資料的位置
row = 0
col = 0
#for回圈添加資料
for weather, tem in (data):
worksheet.write(row, col,weather)
worksheet.write(row, col + 1, tem)
row += 1
workbook.close()
效果如下:
四、寫入一整行列資料
worksheet.write_row(“A1”,data,bold)
worksheet.write_column(“A1”,data,bold)
第一行代碼為按行插入且從A1單元格開始,data為要寫入的資料(格式為一個串列),bold為單元格樣式,第二行代碼與之不同的是按列插入,
五、設定單元格樣式
bold = f.add_format({
'bold': True, # 字體加粗
'border': 1, # 單元格邊框寬度
'align': 'left', # 水平對齊方式
'valign': 'vcenter', # 垂直對齊方式
'fg_color': '#F4B084', # 單元格背景顏色
'text_wrap': True, # 是否自動換行
})
在上方的寫入行列資料中我們用到的bold引數,這是一個調節單元格樣式的引數,常用的格式如上代碼,
六、插入圖片
插入圖片是xlsxwriter矚目的地方,接下來將分為小部分詳細講解
worksheet.insert_image('A1','絕對路徑')
第一個引數是你要指定哪個單元格插入圖片,第二個引數是存放圖片的絕對路徑,
6.1 插入超鏈接
worksheet.write_url(row, col, "internal:%s!A1" % ("鏈接物件"), string="鏈接顯示名字")
row和col引數都是設定位置資訊的,
6.2 插入圖表
插入圖表是xlsxwriter模塊的最大閃光點,這里我將詳細介紹插入圖表的代碼及其解釋,
首先,先熟悉插入圖表的代碼
chart = workbook.add_chart({'type': 'column','subtype': 'stacked'})
workbook.add_chartsheet()函式是最經典的插入圖表函式,字典里的第一個鍵type引數指的是放入的圖表型別,而第二個鍵指的是某些圖表型別中的圖表子型別,
支持的圖表型別有以下:
- area:創建一個Area(實線)樣式表,
- bar:創建條形樣式(轉置直方圖)圖表,
- column:創建列樣式(直方圖)圖表,
- line:創建線型圖表,
- pie:創建一個餅圖樣式圖表,
- doughnut:創建一個甜甜圈樣式表,
- scatter:創建散點圖樣式圖,
- stock:創建一個股票樣式圖,
- radar:創建雷達樣式表,
設定了圖表型別接下來就是插入資料,插入資料我們用chart.add_series(options)函式,
這里的options是以字典形式的圖表資料,在Excel中圖表系列是一組資訊(值、軸標簽、格式等),
接下來就是將創建好的chart物件放入倒Excel表格中
worksheet.insert_chart('A7', chart)
insert_chart()函式是將圖表插入到作業表指定的位置,第一個引數為單元格位置資訊,第二個引數為選定的圖表,
我們用一個例子將上述三個函式結合,并畫一個條形圖
import xlsxwriter
workbook = xlsxwriter.Workbook('條形圖.xlsx')
worksheet = workbook.add_worksheet('Zaoqi') #如果出現沒影像顯示就洗掉里面的引數
chart = workbook.add_chart({'type': 'column'})
data = https://www.cnblogs.com/python147/archive/2021/02/18/[
[3, 6, 9, 12, 15],
[2, 4, 6, 8, 10],
[1, 2, 3, 4, 5],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})
worksheet.insert_chart('A7', chart)
workbook.close()
效果如下:
上述例子中的插入資料我們運用了和第一個例子不一樣的for回圈插入,運用的是worksheet.write_column()對整行整列進行資料添加,
注意:如果表格里的圖表沒有顯示則在這代碼里改worksheet = workbook.add_worksheet(),洗掉里面的引數,原因是Excel的版本問題,
在chart.add_series()函式中我們用到的字典型別格式為
{'values': '=作業表名!$列對應字母$行對應數字:$列對應字母$行對應數字'}
在這里,列對應字母和行對應數字可以看圖片中,我們需要的是ABC三列中的1-5行數值,故我們這里參考3個添加函式,
6.3 設定x軸與y軸屬性
chart.set_x_axis({
'name': 'Zaoqi Python',
'name_font': {'size': 12, 'bold': True},
'num_font': {'italic': True },
})
第一個引數name是指軸的名稱,name_font設定x軸的字體屬性,這里設定了粗體和大小,num_font指軸編號(也即如圖中x軸下方的1234)的字體屬性這里設定了斜體,
同理,y軸、子圖xy軸的設定也是一樣的,區別在于將代碼中的x換成對應的y和x,
我們在上述2中的代碼加上這段代碼看效果:編號變斜體、有了標題并且是粗體,
6.4 合并兩個不同型別的圖表
合并圖表用combine()函式
import xlsxwriter
workbook = xlsxwriter.Workbook('條形圖.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({'type': 'column'})
line_chart = workbook.add_chart({'type': 'line'})
data = https://www.cnblogs.com/python147/archive/2021/02/18/[
[3, 6, 9, 12, 15],
[2, 4, 6, 8, 10],
[1, 2, 3, 4, 5],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})
line_chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
line_chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
line_chart.add_series({'values': '=Sheet1!$C$1:$C$5'})
chart.set_x_axis({
'name': 'Zaoqi Python',
'name_font': {'size': 12, 'bold': True},
'num_font': {'italic': True },
})
chart.combine(line_chart)
worksheet.insert_chart('A7', chart)
workbook.close()
效果:
6.5 設定圖表尺寸
用set_size()函式來設定圖表尺寸,
chart.set_size({'width': 720, 'height': 576})
chart.set_size({'x_scale': 1.5, 'y_scale': 2})
worksheet.insert_chart('E2', chart, {'x_offset': -10, 'y_offset': 5})
函式里面有六個引數:width、height,x_offset,y_offset
前兩個代表寬度與高度是以像素為單位,默認的圖表的寬度*高度為480 x 288像素,
后兩個引數是設定型別圖片在整個chart圖表區域中移動,含義用一張表格來說明
6.6 設定圖表標題
用set_title()函式
chart.set_title({'name': 'Zaoqi Python title'})
chart.set_title({
'name': 'Zaoqi Python Title',
'overlay': True,
'layout': {
'x': 0.62,
'y': 0.24,
}
})
chart.set_title({'none': True}) #關閉此默認標題同時關閉所有其他set_title()選項,
name指標題;overlay代表允許標題覆寫到圖表上通常與layout一起使用,layout以圖表相對單位設定標題的位置(x, y),
這里我們只運用第一行代碼chart.set_title({'name': 'Zaoqi Python title'})將它放入到4中代碼的combine函式上面,得到效果如下:
6.7 設定圖例
用set_legend()函式設定圖例屬性,
chart.set_legend({'none': True})
chart.set_legend({'position': 'none'})
chart.set_legend({'position': 'bottom'})
chart.set_legend({'font': {'size': 4, 'bold': True}})
chart.set_legend({'delete_series': [0, 3]})
none:關閉圖例;默認是開啟的,position:圖例的位置,font:圖例的字體屬性,delete_series:洗掉指定圖例,以串列呈現,
6.8 設定圖表樣式
用set_style(num)函式,用于將圖表的樣式設定為Excel中“設計”選項卡上可用的48種內置樣式之一,引數num就是48種內置樣式之一,
我們這里把num改成6也就是樣式6,同樣放在4種代碼combine那段代碼上面,效果如下
6.9 設定圖表區域
用set_chartarea()函式來設定圖表區域的屬性圖表區域,也就是圖表背后的區域,
chart.set_chartarea({
'fill': {'color': 'black'}
})
fill:設定圖表區域的實心填充屬性,例如顏色,
6.10 在圖表下方添加資料表
用set_table()函式在水平軸下方添加一個資料表,
效果如下:
七、關閉Excel檔案
在上面例子中都可以看到最后都呼叫了這句代碼
workbook.close()
小結
至此,有關xlsxwriter的常用操作就基本介紹完畢,相信通過上面的代碼與案例講解,你已經明白xlsxwriter與openpyxl和xlwings的具體區別在哪,
如果想要徹底理解,還需要自己動手執行一遍上面的各部分代碼來體會,也希望大家能夠在不同的場景下,靈活運用不同的Python庫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/260876.html
標籤:其他
上一篇:JPG學習筆記4(附完整代碼)
