<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用原生的方式操作Excel,Python玩轉(zhuǎn)Excel神器xlsxwriter詳解!

          共 6831字,需瀏覽 14分鐘

           ·

          2021-02-20 17:11

          ↑↑↑關(guān)注后"星標(biāo)"簡說Python
          人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
          ?簡說Python推薦?
          來源/早起Python
          ?作者/劉早起

          在之前的Python辦公自動化系列文章中,我們已經(jīng)介紹了兩個Python操作Excel的庫openpyxlxlwings,并且相信大家已經(jīng)了解這兩者之間的異同。

          但是在Python中操作Excel庫可不止這兩個,本文就將介紹另一個強大的庫xlsxwriter。來學(xué)習(xí)如何用原生的方式操作Excel!

          首先還是來簡單了解下這三個庫之間的區(qū)別

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

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

          簡介

          xlsxwriter是用于創(chuàng)建Excel XLSX文件的Python模塊,可用于將文本、數(shù)字、公式和超鏈接寫入Excel2007 + XLSX文件中的多個工作表。它支持格式化等功能。可以說除了Excel本身,就屬這個功能最齊全了

          它的缺點就是不支持讀取和修改,它只能創(chuàng)建新的文件,如果讀者想完美讀取功能的話,可以結(jié)合xlsxreader來實現(xiàn),兩者結(jié)合可謂真正完整的Excel+XLSX再現(xiàn)。

          其次,它不支持XLS文件的寫入,XLS文件是一種二進制格式的文件。如果讀者想創(chuàng)建XLS格式文件的話可以參考xlwt模塊。

          安裝與概覽

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

          pip?install?XlsxWriter

          在正式講解之前我們需要簡單了解Xlsxwriter的基本流程如下

          常用操作拆解

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

          一、創(chuàng)建Excel文件

          先導(dǎo)入模塊而后使用Workbook()構(gòu)造函數(shù)來創(chuàng)建一個新的工作簿對象。Workbook()接受一個非可選參數(shù)---我們創(chuàng)建文件的文件名。

          import?xlsxwriter
          f?=?xlsxwriter.Workbook()????

          二、創(chuàng)建工作表

          默認(rèn)情況下,Excel文件中的工作表按代碼執(zhí)行順序名稱依次為Sheet1、Sheet2等。但是我們也可以指定一個名稱,如上我們在函數(shù)內(nèi)加入了Data。

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

          三、寫入單個數(shù)據(jù)

          如果對單個單元格進行寫入數(shù)據(jù)用如下語法:

          worksheet.write(row,?col,?some_data)

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

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

          import?xlsxwriter
          workbook?=?xlsxwriter.Workbook('data.xlsx')
          worksheet?=?workbook.add_worksheet('簡說Python')
          #寫入數(shù)據(jù)以元組套列表形式
          data?=?(
          ????['春天',20],
          ?['夏天',30],
          ?['秋天',25],
          ?['冬天',10],
          )
          #設(shè)置初始的輸入數(shù)據(jù)的位置
          row?=?0
          col?=?0
          #for循環(huán)添加數(shù)據(jù)
          for?weather,?tem?in?(data):
          ????worksheet.write(row,?col,weather)
          ????worksheet.write(row,?col?+?1,?tem)
          ????row?+=?1
          workbook.close()

          效果如下:

          四、寫入一整行列數(shù)據(jù)

          worksheet.write_row(“A1”,data,bold)
          worksheet.write_column(“A1”,data,bold)

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

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

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

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

          六、插入圖片

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

          worksheet.insert_image('A1','絕對路徑')

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

          6.1 插入超鏈接

          worksheet.write_url(row,?col,?"internal:%s!A1"?%?("鏈接對象"),?string="鏈接顯示名字")

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

          6.2 插入圖表

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

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

          chart?=?workbook.add_chart({'type':?'column','subtype':?'stacked'})

          workbook.add_chartsheet()函數(shù)是最經(jīng)典的插入圖表函數(shù),字典里的第一個鍵type參數(shù)指的是放入的圖表類型。而第二個鍵指的是某些圖表類型中的圖表子類型。

          支持的圖表類型有以下:

          • area:創(chuàng)建一個Area(實線)樣式表。
          • bar:創(chuàng)建條形樣式(轉(zhuǎn)置直方圖)圖表。
          • column:創(chuàng)建列樣式(直方圖)圖表。
          • line:創(chuàng)建線型圖表。
          • pie:創(chuàng)建一個餅圖樣式圖表。
          • doughnut:創(chuàng)建一個甜甜圈樣式表。
          • scatter:創(chuàng)建散點圖樣式圖。
          • stock:創(chuàng)建一個股票樣式圖。
          • radar:創(chuàng)建雷達(dá)樣式表。

          設(shè)置了圖表類型接下來就是插入數(shù)據(jù),插入數(shù)據(jù)我們用chart.add_series(options)函數(shù)。

          這里的options是以字典形式的圖表數(shù)據(jù),在Excel中圖表系列是一組信息(值、軸標(biāo)簽、格式等)。

          接下來就是將創(chuàng)建好的chart對象放入倒Excel表格中

          worksheet.insert_chart('A7',?chart)

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

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

          import?xlsxwriter

          workbook?=?xlsxwriter.Workbook('條形圖.xlsx')
          worksheet?=?workbook.add_worksheet('Zaoqi')??#如果出現(xiàn)沒圖像顯示就刪除里面的參數(shù)

          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()

          效果如下:

          上述例子中的插入數(shù)據(jù)我們運用了和第一個例子不一樣的for循環(huán)插入,運用的是worksheet.write_column()對整行整列進行數(shù)據(jù)添加。

          注意:如果表格里的圖表沒有顯示則在這代碼里改worksheet = workbook.add_worksheet(),刪除里面的參數(shù),原因是Excel的版本問題。

          chart.add_series()函數(shù)中我們用到的字典類型格式為:{'values': '=工作表名!$列對應(yīng)字母$行對應(yīng)數(shù)字:$列對應(yīng)字母$行對應(yīng)數(shù)字'}。在這里,列對應(yīng)字母和行對應(yīng)數(shù)字可以看圖片中,我們需要的是ABC三列中的1-5行數(shù)值,故我們這里引用3個添加函數(shù)。

          6.3 設(shè)置x軸與y軸屬性

          chart.set_x_axis({
          ????'name':?'Zaoqi?Python',
          ????'name_font':?{'size':?12,?'bold':?True},
          ????'num_font':??{'italic':?True?},
          })

          第一個參數(shù)name是指軸的名稱,name_font設(shè)置x軸的字體屬性,這里設(shè)置了粗體和大小。num_font指軸編號(也即如圖中x軸下方的1234)的字體屬性這里設(shè)置了斜體。

          同理,y軸、子圖xy軸的設(shè)置也是一樣的,區(qū)別在于將代碼中的x換成對應(yīng)的y和x。

          我們在上述2中的代碼加上這段代碼看效果:編號變斜體、有了標(biāo)題并且是粗體。

          6.4 合并兩個不同類型的圖表

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

          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 設(shè)置圖表尺寸

          set_size()函數(shù)來設(shè)置圖表尺寸。

          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})

          函數(shù)里面有六個參數(shù):widthheightx_offset,y_offset

          前兩個代表寬度與高度是以像素為單位,默認(rèn)的圖表的寬度*高度為480 x 288像素。

          后兩個參數(shù)是設(shè)置類型圖片在整個chart圖表區(qū)域中移動。含義用一張表格來說明

          參數(shù)正負(fù)意義
          x_offset向右偏移
          x_offset負(fù)向左偏移
          y_offset向下偏移
          y_offset負(fù)向上偏移

          6.6 設(shè)置圖表標(biāo)題

          set_title()函數(shù)

          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})??#關(guān)閉此默認(rèn)標(biāo)題同時關(guān)閉所有其他set_title()選項。

          name指標(biāo)題;overlay代表允許標(biāo)題覆蓋到圖表上通常與layout一起使用。layout以圖表相對單位設(shè)置標(biāo)題的位置(x, y)。

          這里我們只運用第一行代碼chart.set_title({'name': 'Zaoqi Python title'})將它放入到4中代碼的combine函數(shù)上面。得到效果如下:

          6

          6.7 設(shè)置圖例

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

          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:關(guān)閉圖例;默認(rèn)是開啟的。position:圖例的位置。font:圖例的字體屬性。delete_series:刪除指定圖例,以列表呈現(xiàn)。

          6.8 設(shè)置圖表樣式

          set_style(num)函數(shù),用于將圖表的樣式設(shè)置為Excel中“設(shè)計”選項卡上可用的48種內(nèi)置樣式之一。參數(shù)num就是48種內(nèi)置樣式之一。

          我們這里把num改成6也就是樣式6,同樣放在4種代碼combine那段代碼上面。效果如下

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

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

          chart.set_chartarea({
          ????'fill':???{'color':?'black'}
          })

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

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

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

          效果如下:

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

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

          workbook.close()

          小結(jié)

          至此,有關(guān)xlsxwriter的常用操作就基本介紹完畢,相信通過上面的代碼與案例講解,你已經(jīng)明白xlsxwriteropenpyxlxlwings的具體區(qū)別在哪。

          如果想要徹底理解,還需要自己動手執(zhí)行一遍上面的各部分代碼來體會,也希望大家能夠在不同的場景下,靈活運用不同的Python庫。后續(xù),還會繼續(xù)分享更多的Python操作Excel相關(guān)文章!

          掃碼回復(fù):2021

          獲取最新學(xué)習(xí)資源



          點擊上方卡片,一起學(xué)Python

          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機器學(xué)習(xí)等方面,別再說不知道該從哪開始,實戰(zhàn)哪里找了

          看完“點贊”的美德不能丟?

          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺去啦久久久 | 国产高清在线无码 | 欧美福利在线观看 | 激情综合视频在线 | 老欧性老太色HD大全 |