用原生的方式操做Excel,Python玩轉Excel神器xlsxwriter詳解!

你們好,在以前的Python辦公自動化系列文章中,咱們已經介紹了兩個Python操做Excel的庫openpyxl與xlwings,而且相信你們已經瞭解這二者之間的異同。php

可是在Python中操做Excel庫可不止這兩個,本文就將介紹另外一個強大的庫xlsxwriter。來學習如何用原生的方式操做Excel!css

首先仍是來簡單瞭解下這三個庫之間的區別python

  • openpyxl:只容許讀取和寫入.xlsx格式文件並進行增刪改增查。
  • xlwings:容許讀取和寫入.xlsx和.xls兩種格式文件並進行增刪改查。
  • xlsxwriter:只容許寫入.xlsx格式的文件。

比較三者,你可能會以爲xlsxwriter這個庫也太不行了吧?其實不是的,在寫入這方面前兩個庫比不上它,它的精華在於寫入(多張樣式圖表、圖片、表格樣式修改等)。話很少說,下面開始講解!bash

簡介

xlsxwriter是用於建立Excel XLSX文件的Python模塊,可用於將文本、數字、公式和超連接寫入Excel2007 + XLSX文件中的多個工做表。它支持格式化等功能。能夠說除了Excel自己,就屬這個功能最齊全了。函數

 

 

它的缺點就是不支持讀取和修改,它只能建立新的文件,若是讀者想完美讀取功能的話,能夠結合xlsxreader來實現,二者結合可謂真正完整的Excel+XLSX再現。學習

其次,它不支持XLS文件的寫入,XLS文件是一種二進制格式的文件。若是讀者想建立XLS格式文件的話能夠參考xlwt模塊。字體

安裝與概覽

安裝很簡單,沒有什麼特別要注意的,直接在命令行/終端中安裝便可ui

pip install XlsxWriter

在正式講解以前咱們須要簡單瞭解Xlsxwriter的基本流程以下url

 

經常使用操做拆解

下面我將對操做Excel時常見的幾個操做進行舉例講解spa

1、建立Excel文件

先導入模塊然後使用Workbook()構造函數來建立一個新的工做簿對象。Workbook()接受一個非可選參數---咱們建立文件的文件名。

import xlsxwriter f = xlsxwriter.Workbook() 

2、建立工做表

默認狀況下,Excel文件中的工做表按代碼執行順序名稱依次爲Sheet一、Sheet2等。可是咱們也能夠指定一個名稱,如上咱們在函數內加入了Data。

worksheet1 = workbook.add_worksheet()        
#worksheet2 = workbook.add_worksheet('Data') 

3、寫入單個數據

若是對單個單元格進行寫入數據用以下語法:

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 = ( ['春天',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() 

效果以下:

 

4、寫入一整行列數據

worksheet.write_row(「A1」,data,bold) worksheet.write_column(「A1」,data,bold) 

第一行代碼爲按行插入且從A1單元格開始,data爲要寫入的數據(格式爲一個列表),bold爲單元格樣式。第二行代碼與之不一樣的是按列插入。

5、設置單元格樣式

bold = f.add_format({
        'bold': True, # 字體加粗 'border': 1, # 單元格邊框寬度 'align': 'left', # 水平對齊方式 'valign': 'vcenter', # 垂直對齊方式 'fg_color': '#F4B084', # 單元格背景顏色 'text_wrap': True, # 是否自動換行 }) 

在上方的寫入行列數據中咱們用到的bold參數,這是一個調節單元格樣式的參數,經常使用的格式如上代碼。

6、插入圖片

插入圖片是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 = [ [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 = [ [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()函數在水平軸下方添加一個數據表。

效果以下:

 

7、關閉Excel文件

在上面例子中均可以看到最後都調用了這句代碼

workbook.close() 

小結

至此,有關xlsxwriter的經常使用操做就基本介紹完畢,相信經過上面的代碼與案例講解,你已經明白xlsxwriter與openpyxl和xlwings的具體區別在哪。

若是想要完全理解,還須要本身動手執行一遍上面的各部分代碼來體會,也但願你們可以在不一樣的場景下,靈活運用不一樣的Python庫。

相關文章
相關標籤/搜索