1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python辦公自動(dòng)化之Excel報(bào)表自動(dòng)化,看這一篇就夠了!

        共 36664字,需瀏覽 74分鐘

         ·

        2021-07-13 03:13

        3e59cb36b94ebaf097d049afff9e5628.webp

        作者:超級(jí)大洋蔥806

        來(lái)源:https://blog.csdn.net/u014779536/article/details/108182833

        今天給大家分享一篇Python自動(dòng)化辦公干貨,全文3W+字,內(nèi)容很干,可以碼住細(xì)細(xì)品味。

        0. Python Excel庫(kù)對(duì)比

        我們先來(lái)看一下python中能操作Excel的庫(kù)對(duì)比(一共九個(gè)庫(kù)):d937ec386afeb7fd69e31179689c9328.webp

        1. Python xlrd 讀取 操作Excel

        1.1 xlrd模塊介紹

        (1)什么是xlrd模塊?
        • python操作excel主要用到xlrd和xlwt這兩個(gè)庫(kù),即xlrd是讀excel,xlwt是寫(xiě)excel的庫(kù)。

        (2)為什么使用xlrd模塊?
        • 在UI自動(dòng)化或者接口自動(dòng)化中數(shù)據(jù)維護(hù)是一個(gè)核心,所以此模塊非常實(shí)用。

        xlrd模塊可以用于讀取Excel的數(shù)據(jù),速度非???,推薦使用!官方文檔:https://xlrd.readthedocs.io/en/latest/

        1.2 安裝xlrd模塊

        • 到python官網(wǎng)下載http://pypi.python.org/pypi/xlrd模塊安裝,前提是已經(jīng)安裝了python 環(huán)境。

        • 或者在cmd窗口 pip install xlrd

        pip?install?xlrd
        我這里是anaconda自帶有xlrd,所以提示已經(jīng)安裝:bbf0f191e00dcd03bd647984848e64c7.webp

        1.3 使用介紹

        1. 常用單元格的數(shù)據(jù)類(lèi)型
        • empty(空的)
        • string(text)
        • number
        • date
        • boolean
        • error
        • blank(空白表格)
        1. 導(dǎo)入模塊
        import?xlrd
        1. 打開(kāi)Excel文件讀取數(shù)據(jù)
        data?=?xlrd.open_workbook(filename)#文件名以及路徑,如果路徑或者文件名有中文給前面加一個(gè)?r
        1. 常用的函數(shù)
        • excel中最重要的方法就是book和sheet的操作

        (1)獲取book(excel文件)中一個(gè)工作表
        table?=?data.sheets()[0]?????????????#通過(guò)索引順序獲取
        table?=?data.sheet_by_index(sheet_indx)??#通過(guò)索引順序獲取
        table?=?data.sheet_by_name(sheet_name)??#通過(guò)名稱(chēng)獲取

        #?以上三個(gè)函數(shù)都會(huì)返回一個(gè)xlrd.sheet.Sheet()對(duì)象

        names?=?data.sheet_names()????????#返回book中所有工作表的名字
        data.sheet_loaded(sheet_name?or?indx)????#?檢查某個(gè)sheet是否導(dǎo)入完畢
        (2) 行的操作
        nrows?=?table.nrows
        ????#?獲取該sheet中的行數(shù),注,這里table.nrows后面不帶().

        table.row(rowx)
        ????#?返回由該行中所有的單元格對(duì)象組成的列表,這與tabel.raw()方法并沒(méi)有區(qū)別。

        table.row_slice(rowx)
        ????#?返回由該行中所有的單元格對(duì)象組成的列表

        table.row_types(rowx,?start_colx=0,?end_colx=None)
        ????#?返回由該行中所有單元格的數(shù)據(jù)類(lèi)型組成的列表;????
        ????#?返回值為邏輯值列表,若類(lèi)型為empy則為0,否則為1

        table.row_values(rowx,?start_colx=0,?end_colx=None)
        ????#?返回由該行中所有單元格的數(shù)據(jù)組成的列表

        table.row_len(rowx)
        ????#?返回該行的有效單元格長(zhǎng)度,即這一行有多少個(gè)數(shù)據(jù)
        c5b6dbd0cce12aa59ded73b318afedb6.webp(3)列(colnum)的操作
        ncols?=?table.ncols
        ????#?獲取列表的有效列數(shù)

        table.col(colx,?start_rowx=0,?end_rowx=None)
        ????#?返回由該列中所有的單元格對(duì)象組成的列表

        table.col_slice(colx,?start_rowx=0,?end_rowx=None)
        ????#?返回由該列中所有的單元格對(duì)象組成的列表

        table.col_types(colx,?start_rowx=0,?end_rowx=None)
        ????#?返回由該列中所有單元格的數(shù)據(jù)類(lèi)型組成的列表

        table.col_values(colx,?start_rowx=0,?end_rowx=None)
        ????#?返回由該列中所有單元格的數(shù)據(jù)組成的列表
        135a8fb0de80163bff6a9d741a5a4478.webp(4)單元格的操作
        table.cell(rowx,colx)
        ????#?返回單元格對(duì)象

        table.cell_type(rowx,colx)
        ????#?返回對(duì)應(yīng)位置單元格中的數(shù)據(jù)類(lèi)型

        table.cell_value(rowx,colx)
        ????#?返回對(duì)應(yīng)位置單元格中的數(shù)據(jù)

        1.4 實(shí)戰(zhàn)訓(xùn)練

        我們先在表格放入以下數(shù)據(jù),點(diǎn)擊保存:42a105f1c27a569418ffc2f0fa80bfbe.webp使用xlrd模塊進(jìn)行讀?。?/span>
        import?xlrd

        xlsx?=?xlrd.open_workbook('./3_1?xlrd?讀取?操作練習(xí).xlsx')

        #?通過(guò)sheet名查找:xlsx.sheet_by_name("sheet1")
        #?通過(guò)索引查找:xlsx.sheet_by_index(3)
        table?=?xlsx.sheet_by_index(0)

        #?獲取單個(gè)表格值?(2,1)表示獲取第3行第2列單元格的值
        value?=?table.cell_value(2,?1)
        print("第3行2列值為",value)

        #?獲取表格行數(shù)
        nrows?=?table.nrows
        print("表格一共有",nrows,"行")

        #?獲取第4列所有值(列表生成式)
        name_list?=?[str(table.cell_value(i,?3))?for?i?in?range(1,?nrows)]
        print("第4列所有的值:",name_list)
        打印結(jié)果:215d7d1a59bd4b85b98ffbc7bced94d5.webp列表生成式介紹:614defd199a4000ba83fef4d6f4d6737.webp列表生成式學(xué)習(xí)鏈接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017317609699776

        2. Python xlwt 寫(xiě)入 操作Excel(僅限xls格式?。?/span>

        xlwt可以用于寫(xiě)入新的Excel表格或者在原表格基礎(chǔ)上進(jìn)行修改,速度也很快,推薦使用!官方文檔:https://xlwt.readthedocs.io/en/latest/

        2.1 pip安裝xlwt

        pip?install?xlwt
        我這里是anaconda自帶有xlwt,所以提示已經(jīng)安裝:29c3c39083b6835cea15f6279cb777c1.webp

        2.2 使用xlwt創(chuàng)建新表格并寫(xiě)入

        一開(kāi)始目錄下只有這兩個(gè)文件:2596381541d2c9ed4ac60f06a28350a4.webp編寫(xiě)xlwt新表格寫(xiě)入程序:
        #?3.2.2?使用xlwt創(chuàng)建新表格并寫(xiě)入
        def?fun3_2_2():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")
        ????worksheet.write(2,1,?"內(nèi)容2")

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        94b55beb7248cf469d082569eb269615.webp生成的表格內(nèi)容如下:9f441539a881c7ec6a2541c67b2a9635.webp

        2.3 xlwt 設(shè)置字體格式

        程序示例:
        #?3.2.3?xlwt設(shè)置字體格式
        def?fun3_2_3():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?初始化樣式
        ????style?=?xlwt.XFStyle()

        ????#?為樣式創(chuàng)建字體
        ????font?=?xlwt.Font()
        ????font.name?=?'Times?New?Roman'???#字體
        ????font.bold?=?True????????????????#加粗
        ????font.underline?=?True???????????#下劃線
        ????font.italic?=?True??????????????#斜體

        ????#?設(shè)置樣式
        ????style.font?=?font

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")
        ????worksheet.write(2,1,?"內(nèi)容2",style)

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        效果如下:843eb43a5db80bf03ebd0ceeee34be59.webp

        2.4 xlwt 設(shè)置列寬

        xlwt中列寬的值表示方法:默認(rèn)字體0的1/256為衡量單位。xlwt創(chuàng)建時(shí)使用的默認(rèn)寬度為2960,既11個(gè)字符0的寬度所以我們?cè)谠O(shè)置列寬時(shí)可以用如下方法:width = 256 * 20 256為衡量單位,20表示20個(gè)字符寬度程序示例:
        #?3.2.4?設(shè)置列寬
        def?fun3_2_4():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")
        ????worksheet.write(2,1,?"內(nèi)容2")

        ????#?設(shè)置列寬
        ????worksheet.col(0).width?=?256*20

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        效果如下:82bee2b5b1672617317d2e8add507df1.webp

        2.5 xlwt 設(shè)置行高

        在xlwt中沒(méi)有特定的函數(shù)來(lái)設(shè)置默認(rèn)的列寬及行高行高是在單元格的樣式中設(shè)置的,你可以通過(guò)自動(dòng)換行通過(guò)輸入文字的多少來(lái)確定行高程序示例:
        #?3.2.5?設(shè)置行高
        def?fun3_2_5():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")
        ????worksheet.write(2,1,?"內(nèi)容2")

        ????#?設(shè)置行高
        ????style?=?xlwt.easyxf('font:height?360;')??#?18pt,類(lèi)型小初的字號(hào)
        ????row?=?worksheet.row(0)
        ????row.set_style(style)

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        效果如下:c088a6002d6f47ccc36cf2243c07e314.webp

        2.6 xlwt 合并列和行

        程序示例:
        #?3.2.6?合并列和行
        def?fun3_2_6():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")
        ????
        ????#?合并?第1行到第2行?的?第0列到第3列
        ????worksheet.write_merge(1,?2,?0,?3,?'Merge?Test')

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        效果如下:456f5c50c586563944af9f1562db4ff3.webp

        2.7 xlwt 添加邊框

        程序示例:
        #?3.2.7?添加邊框
        def?fun3_2_7():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")
        ????
        ????#?設(shè)置邊框樣式
        ????borders?=?xlwt.Borders()??#?Create?Borders
        ????
        ????#?May?be:???NO_LINE,?THIN,?MEDIUM,?DASHED,?DOTTED,?THICK,?DOUBLE,?HAIR,
        ????#???????????MEDIUM_DASHED,?THIN_DASH_DOTTED,?MEDIUM_DASH_DOTTED,?THIN_DASH_DOT_DOTTED,
        ????#???????????MEDIUM_DASH_DOT_DOTTED,?SLANTED_MEDIUM_DASH_DOTTED,?or?0x00?through?0x0D.
        ????#?DASHED虛線
        ????#?NO_LINE沒(méi)有
        ????#?THIN實(shí)線
        ????
        ????borders.left?=?xlwt.Borders.DASHED
        ????borders.right?=?xlwt.Borders.DASHED
        ????borders.top?=?xlwt.Borders.DASHED
        ????borders.bottom?=?xlwt.Borders.DASHED
        ????borders.left_colour?=?0x40
        ????borders.right_colour?=?0x40
        ????borders.top_colour?=?0x40
        ????borders.bottom_colour?=?0x40
        ????
        ????style?=?xlwt.XFStyle()??#?Create?Style
        ????style.borders?=?borders??#?Add?Borders?to?Style
        ????
        ????worksheet.write(0,?0,?'內(nèi)容1',?style)

        ????worksheet.write(2,1,?"內(nèi)容2")

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        效果如下:19e4660f9a25a9aa6e447ee8173e2235.webp

        2.8 xlwt為單元格設(shè)置背景色

        程序示例:
        #?設(shè)置單元格背景色
        def?fun3_2_8():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")

        ????#?創(chuàng)建樣式
        ????pattern?=?xlwt.Pattern()
        ????
        ????#?May?be:?NO_PATTERN,?SOLID_PATTERN,?or?0x00?through?0x12
        ????pattern.pattern?=?xlwt.Pattern.SOLID_PATTERN
        ????
        ????#?May?be:?8?through?63.?0?=?Black,?1?=?White,?2?=?Red,?3?=?Green,?4?=?Blue,?5?=?Yellow,
        ????#?6?=?Magenta,?7?=?Cyan,?16?=?Maroon,?17?=?Dark?Green,?18?=?Dark?Blue,?19?=?Dark?Yellow?,
        ????#?almost?brown),?20?=?Dark?Magenta,?21?=?Teal,?22?=?Light?Gray,?23?=?Dark?Gray,?the?list?goes?on...
        ????pattern.pattern_fore_colour?=?5
        ????style?=?xlwt.XFStyle()
        ????style.pattern?=?pattern

        ????#?使用樣式
        ????worksheet.write(2,1,?"內(nèi)容2",style)
        效果如下:b70833404209cb2b4a635ef1c5124f88.webp

        2.9 xlwt設(shè)置單元格對(duì)齊

        使用xlwt中的Alignment來(lái)設(shè)置單元格的對(duì)齊方式,其中horz代表水平對(duì)齊方式,vert代表垂直對(duì)齊方式。VERT_TOP = 0x00 上端對(duì)齊
        VERT_CENTER = 0x01 居中對(duì)齊(垂直方向上)
        VERT_BOTTOM = 0x02 低端對(duì)齊
        HORZ_LEFT = 0x01 左端對(duì)齊
        HORZ_CENTER = 0x02 居中對(duì)齊(水平方向上)
        HORZ_RIGHT = 0x03 右端對(duì)齊
        程序示例:
        #?設(shè)置單元格對(duì)齊
        def?fun3_2_9():
        ????#?創(chuàng)建新的workbook(其實(shí)就是創(chuàng)建新的excel)
        ????workbook?=?xlwt.Workbook(encoding=?'ascii')

        ????#?創(chuàng)建新的sheet表
        ????worksheet?=?workbook.add_sheet("My?new?Sheet")

        ????#?往表格寫(xiě)入內(nèi)容
        ????worksheet.write(0,0,?"內(nèi)容1")

        ????#?設(shè)置樣式
        ????style?=?xlwt.XFStyle()
        ????al?=?xlwt.Alignment()
        ????#?VERT_TOP?=?0x00???????上端對(duì)齊
        ????#?VERT_CENTER?=?0x01????居中對(duì)齊(垂直方向上)
        ????#?VERT_BOTTOM?=?0x02????低端對(duì)齊
        ????#?HORZ_LEFT?=?0x01??????左端對(duì)齊
        ????#?HORZ_CENTER?=?0x02????居中對(duì)齊(水平方向上)
        ????#?HORZ_RIGHT?=?0x03?????右端對(duì)齊
        ????al.horz?=?0x02??#?設(shè)置水平居中
        ????al.vert?=?0x01??#?設(shè)置垂直居中
        ????style.alignment?=?al

        ????#?對(duì)齊寫(xiě)入
        ????worksheet.write(2,1,?"內(nèi)容2",style)

        ????#?保存
        ????workbook.save("新創(chuàng)建的表格.xls")
        效果如下:05103ad876d53f0d83ada1a5834e1f38.webp

        3. Python xlutils 修改 操作Excel

        xlutils可用于拷貝原excel或者在原excel基礎(chǔ)上進(jìn)行修改,并保存;官方文檔:https://xlutils.readthedocs.io/en/latest/

        3.1 pip安裝xlutils

        pip?install?xlutils
        安裝過(guò)程:3fbb2b50801db2d2f9d1be04813a962c.webp

        3.2 xlutils拷貝源文件(需配合x(chóng)lrd使用)

        bf5247499ff800d6345cec9ea1945496.webp表格內(nèi)容如下:9f64a6e54db97f1ccf067c453950c125.webp程序示例:
        #?3.3.2?拷貝源文件
        def?fun3_3_2():
        ????workbook?=?xlrd.open_workbook('3_3?xlutils?修改操作練習(xí).xlsx')??#?打開(kāi)工作簿
        ????new_workbook?=?copy(workbook)??#?將xlrd對(duì)象拷貝轉(zhuǎn)化為xlwt對(duì)象
        ????new_workbook.save("new_test.xls")??#?保存工作簿
        效果如下:5f53b7e1437abcf5fb0fb062484c2845.webp內(nèi)容為:319b0313872423aa360a024faa420466.webp不過(guò)表格的樣式全部消失了。

        3.3 xlutils 讀取 寫(xiě)入 (也就是修改)Excel 表格信息

        程序示例:
        #?3.3.3?xlutils讀取?寫(xiě)入?Excel?表格信息
        def?fun3_3_3():
        ????# file_path:文件路徑,包含文件的全名稱(chēng)
        ????# formatting_info=True:保留Excel的原格式(使用與xlsx文件)
        ????workbook?=?xlrd.open_workbook('3_3?xlutils?修改操作練習(xí).xlsx')
        ????
        ????new_workbook?=?copy(workbook)??#?將xlrd對(duì)象拷貝轉(zhuǎn)化為xlwt對(duì)象

        ????#?讀取表格信息
        ????sheet?=?workbook.sheet_by_index(0)
        ????col2?=?sheet.col_values(1)??#?取出第二列
        ????cel_value?=?sheet.cell_value(1,?1)
        ????print(col2)
        ????print(cel_value)

        ????#?寫(xiě)入表格信息
        ????write_save?=?new_workbook.get_sheet(0)
        ????write_save.write(0,?0,?"xlutils寫(xiě)入!")

        ????new_workbook.save("new_test.xls")??#?保存工作簿
        效果如下:41151fabb00e39c78856697fea70d58d.webp復(fù)制了源文件信息,并進(jìn)行了追加:43bd60a0c4e621a905a51d2134e00ebc.webp

        4. Python xlwings 讀取 寫(xiě)入 修改 操作Excel

        xlwings比起xlrd、xlwt和xlutils,xlwings可豪華多了,它具備以下特點(diǎn):
        • xlwings能夠非常方便的讀寫(xiě)Excel文件中的數(shù)據(jù),并且能夠進(jìn)行單元格格式的修改

        • 可以和matplotlib以及pandas無(wú)縫連接,支持讀寫(xiě)numpy、pandas數(shù)據(jù)類(lèi)型,將matplotlib可視化圖表導(dǎo)入到excel中。

        • 可以調(diào)用Excel文件中VBA寫(xiě)好的程序,也可以讓VBA調(diào)用用Python寫(xiě)的程序。

        • 開(kāi)源免費(fèi),一直在更新

        官網(wǎng)地址:https://www.xlwings.org/官方文檔:https://docs.xlwings.org/en/stable/api.html31901cde364c5fbeecc1610e3afba688.webp14194923f7fe2839bc87ab53d6767e1e.webp

        4.1 pip安裝xlwings

        pip?install?xlwings

        4.2 基本操作

        引入庫(kù)
        import?xlwings?as?xw?
        打開(kāi)Excel程序,默認(rèn)設(shè)置:程序可見(jiàn),只打開(kāi)不新建工作薄
        app?=?xw.App(visible=True,add_book=False)
        #新建工作簿?(如果不接下一條代碼的話,Excel只會(huì)一閃而過(guò),賣(mài)個(gè)萌就走了)
        wb?=?app.books.add()
        打開(kāi)已有工作簿(支持絕對(duì)路徑和相對(duì)路徑)
        wb?=?app.books.open('example.xlsx')
        #練習(xí)的時(shí)候建議直接用下面這條
        #wb?=?xw.Book('example.xlsx')
        #這樣的話就不會(huì)頻繁打開(kāi)新的Excel
        保存工作簿
        wb.save('example.xlsx')
        退出工作簿(可省略)
        wb.close()
        退出Excel
        app.quit()
        三個(gè)例子:(1)打開(kāi)已存在的Excel文檔
        #?導(dǎo)入xlwings模塊
        import?xlwings?as?xw

        #?打開(kāi)Excel程序,默認(rèn)設(shè)置:程序可見(jiàn),只打開(kāi)不新建工作薄,屏幕更新關(guān)閉
        app=xw.App(visible=True,add_book=False)
        app.display_alerts=False
        app.screen_updating=False

        #?文件位置:filepath,打開(kāi)test文檔,然后保存,關(guān)閉,結(jié)束程序
        filepath=r'g:\Python?Scripts\test.xlsx'
        wb=app.books.open(filepath)
        wb.save()
        wb.close()
        app.quit()
        (2)新建Excel文檔,命名為test.xlsx,并保存在D盤(pán)
        import?xlwings?as?xw

        app=xw.App(visible=True,add_book=False)
        wb=app.books.add()
        wb.save(r'd:\test.xlsx')
        wb.close()
        app.quit()
        (3)在單元格輸入值新建test.xlsx,在sheet1的第一個(gè)單元格輸入 “人生” ,然后保存關(guān)閉,退出Excel程序。
        ?import?xlwings?as?xw
        ????
        ?app=xw.App(visible=True,add_book=False)
        ?wb=app.books.add()
        ????
        ?#?wb就是新建的工作簿(workbook),下面則對(duì)wb的sheet1的A1單元格賦值
        ?wb.sheets['sheet1'].range('A1').value='人生'
        ?wb.save(r'd:\test.xlsx')
        ?wb.close()
        ?app.quit()
        打開(kāi)已保存的test.xlsx,在sheet2的第二個(gè)單元格輸入“苦短”,然后保存關(guān)閉,退出Excel程序
        ?import?xlwings?as?xw
        ????
        ?app=xw.App(visible=True,add_book=False)
        ?wb=app.books.open(r'd:\test.xlsx')
        ????
        ?#?wb就是新建的工作簿(workbook),下面則對(duì)wb的sheet1的A1單元格賦值
        ?wb.sheets['sheet1'].range('A1').value='苦短'
        ?wb.save()
        ?wb.close()
        ?app.quit()
        掌握以上代碼,已經(jīng)完全可以把Excel當(dāng)作一個(gè)txt文本進(jìn)行數(shù)據(jù)儲(chǔ)存了,也可以讀取Excel文件的數(shù)據(jù),進(jìn)行計(jì)算后,并將結(jié)果保存在Excel中。

        4.3 引用工作薄、工作表和單元格

        (1)按名字引用工作簿,注意工作簿應(yīng)該首先被打開(kāi)
        wb=xw.books['工作簿的名字‘]
        (2)引用活動(dòng)的工作薄
        wb=xw.books.active
        (3)引用工作簿中的sheet
        sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
        #?或者
        wb=xw.books['
        工作簿的名字']
        sht=wb.sheets[sheet的名字]
        (4)引用活動(dòng)sheet
        sht=xw.sheets.active
        (5)引用A1單元格
        rng=xw.books['工作簿的名字‘].sheets['sheet的名字']
        #?或者
        sht=xw.books['
        工作簿的名字‘].sheets['sheet的名字']
        rng=sht.range('A1')
        (6)引用活動(dòng)sheet上的單元格
        #?注意Range首字母大寫(xiě)
        rng=xw.Range('A1')

        #其中需要注意的是單元格的完全引用路徑是:
        #?第一個(gè)Excel程序的第一個(gè)工作薄的第一張sheet的第一個(gè)單元格
        xw.apps[0].books[0].sheets[0].range('A1')
        迅速引用單元格的方式是
        sht=xw.books['名字'].sheets['名字']

        #?A1單元格
        rng=sht[’A1']
        ????????
        #?A1:B5單元格
        rng=sht['
        A1:B5']
        ????????
        #?在第i+1行,第j+1列的單元格
        #?B1單元格
        rng=sht[0,1]
        ????????
        #?A1:J10
        rng=sht[:10,:10]
        ????????
        #PS:?對(duì)于單元格也可以用表示行列的tuple進(jìn)行引用
        #?A1單元格的引用
        xw.Range(1,1)
        ????????
        #A1:C3單元格的引用
        xw.Range((1,1),(3,3))
        引用單元格:
        rng?=?sht.range('a1')
        #rng?=?sht['a1']
        #rng?=?sht[0,0]?第一行的第一列即a1,相當(dāng)于pandas的切片
        引用區(qū)域:
        rng?=?sht.range('a1:a5')
        #rng?=?sht['a1:a5']
        #rng?=?sht[:5,0]

        4.4 寫(xiě)入&讀取數(shù)據(jù)

        1.寫(xiě)入數(shù)據(jù)(1)選擇起始單元格A1,寫(xiě)入字符串‘Hello’
        sht.range('a1').value?=?'Hello'
        (2)寫(xiě)入列表
        #?行存儲(chǔ):將列表[1,2,3]儲(chǔ)存在A1:C1中
        sht.range('A1').value=[1,2,3]
        #?列存儲(chǔ):將列表[1,2,3]儲(chǔ)存在A1:A3中
        sht.range('A1').options(transpose=True).value=[1,2,3]
        #?將2x2表格,即二維數(shù)組,儲(chǔ)存在A1:B2中,如第一行1,2,第二行3,4
        sht.range('A1').options(expand='table')=[[1,2],[3,4]]
        • 默認(rèn)按行插入:A1:D1分別寫(xiě)入1,2,3,4

        sht.range('a1').value?=?[1,2,3,4]
        等同于
        sht.range('a1:d1').value?=?[1,2,3,4]
        • 按列插入:A2:A5分別寫(xiě)入5,6,7,8
        你可能會(huì)想:
        sht.range('a2:a5').value?=?[5,6,7,8]
        但是你會(huì)發(fā)現(xiàn)xlwings還是會(huì)按行處理的,上面一行等同于:
        sht.range('a2').value?=?[5,6,7,8]
        正確語(yǔ)法:
        sht.range('a2').options(transpose=True).value?=?[5,6,7,8]
        既然默認(rèn)的是按行寫(xiě)入,我們就把它倒過(guò)來(lái)嘛(transpose),單詞要打?qū)Γ绻愦蝈e(cuò)單詞,它不會(huì)報(bào)錯(cuò),而會(huì)按默認(rèn)的行來(lái)寫(xiě)入(別問(wèn)我怎么知道的)
        • 多行輸入就要用二維列表了:

        sht.range('a6').expand('table').value?=?[['a','b','c'],['d','e','f'],['g','h','i']]
        2.讀取數(shù)據(jù)(1)讀取單個(gè)值
        #?將A1的值,讀取到a變量中
        a=sht.range('A1').value
        (2)將值讀取到列表中
        #將A1到A2的值,讀取到a列表中
        a=sht.range('A1:A2').value
        #?將第一行和第二行的數(shù)據(jù)按二維數(shù)組的方式讀取
        a=sht.range('A1:B2').value
        • 選取一列的數(shù)據(jù)
        先計(jì)算單元格的行數(shù)(前提是連續(xù)的單元格)
        rng = sht.range('a1').expand('table')
        nrows = rng.rows.count
        接著就可以按準(zhǔn)確范圍讀取了
        a = sht.range(f'a1:a{nrows}').value
        • 選取一行的數(shù)據(jù)
        ncols?=?rng.columns.count
        #用切片
        fst_col?=?sht[0,:ncols].value

        4.5 常用函數(shù)和方法

        1.Book工作薄常用的api
        wb=xw.books[‘工作簿名稱(chēng)']
        • wb.activate() 激活為當(dāng)前工作簿
        • wb.fullname 返回工作簿的絕對(duì)路徑
        • wb.name 返回工作簿的名稱(chēng)
        • wb.save(path=None) 保存工作簿,默認(rèn)路徑為工作簿原路徑,若未保存則為腳本所在的路徑
        • wb. close() 關(guān)閉工作簿
        代碼示例:
        #?引用Excel程序中,當(dāng)前的工作簿
        wb=xw.books.acitve
        #?返回工作簿的絕對(duì)路徑
        x=wb.fullname
        #?返回工作簿的名稱(chēng)
        x=wb.name
        #?保存工作簿,默認(rèn)路徑為工作簿原路徑,若未保存則為腳本所在的路徑
        x=wb.save(path=None)
        #?關(guān)閉工作簿
        x=wb.close()
        2.sheet常用的api
        #?引用某指定sheet
        sht=xw.books['工作簿名稱(chēng)'].sheets['sheet的名稱(chēng)']
        #?激活sheet為活動(dòng)工作表
        sht.activate()
        #?清除sheet的內(nèi)容和格式
        sht.clear()
        #?清除sheet的內(nèi)容
        sht.contents()
        #?獲取sheet的名稱(chēng)
        sht.name
        #?刪除sheet
        sht.delete
        3.range常用的api
        #?引用當(dāng)前活動(dòng)工作表的單元格
        rng=xw.Range('A1')
        #?加入超鏈接
        # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:點(diǎn)擊即鏈接到百度')
        #?取得當(dāng)前range的地址
        rng.address
        rng.get_address()
        #?清除range的內(nèi)容
        rng.clear_contents()
        #?清除格式和內(nèi)容
        rng.clear()
        #?取得range的背景色,以元組形式返回RGB值
        rng.color
        #?設(shè)置range的顏色
        rng.color=(255,255,255)
        #?清除range的背景色
        rng.color=None
        #?獲得range的第一列列標(biāo)
        rng.column
        #?返回range中單元格的數(shù)據(jù)
        rng.count
        #?返回current_region
        rng.current_region
        #?返回ctrl?+?方向
        rng.end('down')
        #?獲取公式或者輸入公式
        rng.formula='=SUM(B1:B5)'
        #?數(shù)組公式
        rng.formula_array
        #?獲得單元格的絕對(duì)地址
        rng.get_address(row_absolute=True,?column_absolute=True,include_sheetname=False,?external=False)
        #?獲得列寬
        rng.column_width
        #?返回range的總寬度
        rng.width
        #?獲得range的超鏈接
        rng.hyperlink
        #?獲得range中右下角最后一個(gè)單元格
        rng.last_cell
        #?range平移
        rng.offset(row_offset=0,column_offset=0)
        #range進(jìn)行resize改變r(jià)ange的大小
        rng.resize(row_size=None,column_size=None)
        #?range的第一行行標(biāo)
        rng.row
        #?行的高度,所有行一樣高返回行高,不一樣返回None
        rng.row_height
        #?返回range的總高度
        rng.height
        #?返回range的行數(shù)和列數(shù)
        rng.shape
        #?返回range所在的sheet
        rng.sheet
        #返回range的所有行
        rng.rows
        #?range的第一行
        rng.rows[0]
        #?range的總行數(shù)
        rng.rows.count
        #?返回range的所有列
        rng.columns
        #?返回range的第一列
        rng.columns[0]
        #?返回range的列數(shù)
        rng.columns.count
        #?所有range的大小自適應(yīng)
        rng.autofit()
        #?所有列寬度自適應(yīng)
        rng.columns.autofit()
        #?所有行寬度自適應(yīng)
        rng.rows.autofit()
        4.books 工作簿集合的api
        #?新建工作簿
        xw.books.add()
        #?引用當(dāng)前活動(dòng)工作簿
        xw.books.active
        4.sheets 工作表的集合
        #?新建工作表
        xw.sheets.add(name=None,before=None,after=None)
        #?引用當(dāng)前活動(dòng)sheet
        xw.sheets.active

        4.6 數(shù)據(jù)結(jié)構(gòu)

        1.一維數(shù)據(jù)python的列表,可以和Excel中的行列進(jìn)行數(shù)據(jù)交換,python中的一維列表,在Excel中默認(rèn)為一行數(shù)據(jù)。
        import?xlwings?as?xw

        sht=xw.sheets.active

        #?將1,2,3分別寫(xiě)入了A1,B1,C1單元格中
        sht.range('A1').value=[1,2,3]

        #?將A1,B1,C1單元格的值存入list1列表中
        list1=sht.range('A1:C1').value

        #?將1,2,3分別寫(xiě)入了A1,A2,A3單元格中
        sht.range('A1').options(transpose=True).value=[1,2,3]

        #?將A1,A2,A3單元格中值存入list1列表中
        list1=sht.range('A1:A3').value
        2.二維數(shù)據(jù)python的二維列表,可以轉(zhuǎn)換為Excel中的行列。二維列表,即列表中的元素還是列表。在Excel中,二維列表中的列表元素,代表Excel表格中的一列。例如:
        #?將a1,a2,a3輸入第一列,b1,b2,b3輸入第二列
        list1=[[‘a(chǎn)1’,'a2','a3'],['b1','b2','b3']]
        sht.range('A1').value=list1
        e8a7bf362a2fc95c1b2081e5ca3816c9.webp
        #?將A1:B3的值賦給二維列表list1
        list1=sht.range('A1:B3').value
        3.Excel中區(qū)域的選取表格
        #?選取第一列
        rng=sht.?range('A1').expand('down')
        rng.value=['a1','a2','a3']
        6f1d6c1b5d0c36c13dd0eb1cf7662e49.webp
        #?選取第一行
        rng=sht.range('A1').expand('right')
        rng=['a1','b1']
        5bad2d73fbe7e42fcc08520e99c2f428.webp
        #?選取表格
        rng.sht.range('A1').expand('table')
        rng.value=[[‘a(chǎn)1’,'a2','a3'],['b1','b2','b3']]
        f4709968334c1f7ce3ef23d5ccb21fb3.webp

        4.7 xlwings生成圖表

        生成圖表的方法,具體方法也可參見(jiàn):Python 操作 Excel 庫(kù) xlwings 常用操作詳解!
        import?xlwings?as?xw
        app?=?xw.App()
        wb?=?app.books.active
        sht?=?wb.sheets.active

        chart?=?sht.charts.add(100,?10)??# 100, 10?為圖表放置的位置坐標(biāo)。以像素為單位。
        chart.set_source_data(sht.range('A1').expand())??#?參數(shù)為表格中的數(shù)據(jù)區(qū)域。
        # chart.chart_type = i ??????????????#?用來(lái)設(shè)置圖表類(lèi)型,具體參數(shù)件下面詳細(xì)說(shuō)明。
        chart.api[1].ChartTitle.Text?=?i??????????#?用來(lái)設(shè)置圖表的標(biāo)題。
        示例代碼:
        import?xlwings?as?xw
        app?=?xw.App()
        wb?=?app.books.active
        sht?=?wb.sheets.active
        #?生成圖表的數(shù)據(jù)
        sht.range('A1').value?=?[['時(shí)間',?'數(shù)量'],?['1日',?2],?['2日',?1],?['3日',?3]
        ?????????????,?['4日',?4],?['5日',?5],?['6日',?6]]
        """圖表類(lèi)型參數(shù),被注釋的那幾個(gè),無(wú)法生成對(duì)應(yīng)的圖表"""
        dic?=?{
        ??'3d_area':?-4098,
        ??'3d_area_stacked':?78,
        ??'3d_area_stacked_100':?79,
        ??'3d_bar_clustered':?60,
        ??'3d_bar_stacked':?61,
        ??'3d_bar_stacked_100':?62,
        ??'3d_column':?-4100,
        ??'3d_column_clustered':?54,
        ??'3d_column_stacked':?55,
        ??'3d_column_stacked_100':?56,
        ??'3d_line':?-4101,
        ??'3d_pie':?-4102,
        ??'3d_pie_exploded':?70,
        ??'area':?1,
        ??'area_stacked':?76,
        ??'area_stacked_100':?77,
        ??'bar_clustered':?57,
        ??'bar_of_pie':?71,
        ??'bar_stacked':?58,
        ??'bar_stacked_100':?59,
        ??'bubble':?15,
        ??'bubble_3d_effect':?87,
        ??'column_clustered':?51,
        ??'column_stacked':?52,
        ??'column_stacked_100':?53,
        ??'cone_bar_clustered':?102,
        ??'cone_bar_stacked':?103,
        ??'cone_bar_stacked_100':?104,
        ??'cone_col':?105,
        ??'cone_col_clustered':?99,
        ??'cone_col_stacked':?100,
        ??'cone_col_stacked_100':?101,
        ??'cylinder_bar_clustered':?95,
        ??'cylinder_bar_stacked':?96,
        ??'cylinder_bar_stacked_100':?97,
        ??'cylinder_col':?98,
        ??'cylinder_col_clustered':?92,
        ??'cylinder_col_stacked':?93,
        ??'cylinder_col_stacked_100':?94,
        ??'doughnut':?-4120,
        ??'doughnut_exploded':?80,
        ??'line':?4,
        ??'line_markers':?65,
        ??'line_markers_stacked':?66,
        ??'line_markers_stacked_100':?67,
        ??'line_stacked':?63,
        ??'line_stacked_100':?64,
        ??'pie':?5,
        ??'pie_exploded':?69,
        ??'pie_of_pie':?68,
        ??'pyramid_bar_clustered':?109,
        ??'pyramid_bar_stacked':?110,
        ??'pyramid_bar_stacked_100':?111,
        ??'pyramid_col':?112,
        ??'pyramid_col_clustered':?106,
        ??'pyramid_col_stacked':?107,
        ??'pyramid_col_stacked_100':?108,
        ??'radar':?-4151,
        ??'radar_filled':?82,
        ??'radar_markers':?81,
        ??#?'stock_hlc':?88,
        ??#?'stock_ohlc':?89,
        ??#?'stock_vhlc':?90,
        ??#?'stock_vohlc':?91,
        ??#?'surface':?83,
        ??#?'surface_top_view':?85,
        ??#?'surface_top_view_wireframe':?86,
        ??#?'surface_wireframe':?84,
        ??'xy_scatter':?-4169,
        ??'xy_scatter_lines':?74,
        ??'xy_scatter_lines_no_markers':?75,
        ??'xy_scatter_smooth':?72,
        ??'xy_scatter_smooth_no_markers':?73
        }
        w?=?385
        h?=?241
        n?=?0
        x?=?100
        y?=?10
        for?i?in?dic.keys():
        ??xx?=?x?+?n?%?3*w??#?用來(lái)生成圖表放置的x坐標(biāo)。
        ??yy?=?y?+?n//3*h???#?用來(lái)生成圖表放置的y坐標(biāo)。
        ??chart?=?sht.charts.add(xx,?yy)
        ??chart.set_source_data(sht.range('A1').expand())
        ??chart.chart_type?=?i
        ??chart.api[1].ChartTitle.Text?=?i
        ??n?+=?1
        wb.save('chart_圖表')
        wb.close()
        app.quit()
        效果如下:383e22e42b0be3b14898895a3edc27e7.webpfb4c1dfbe67393069659a56dde19742a.webp11aa1b6075b7449e1e129892b6cf77fc.webp68e2f39b5c1f81af5b04b86121b3bf9e.webpeaa2a6683f409fdfbf5f38ed2d4ab459.webp

        4.8 實(shí)戰(zhàn)訓(xùn)練

        1. xlwings 新建 Excel 文檔

        74d4b7c0c5d0f0687ccdcb16181497cf.webp程序示例:
        #?3.4.2?xlwings?新建?Excle?文檔
        def?fun3_4_2():
        ????"""
        ????visible
        ??? Ture:可見(jiàn)excel
        ??? False:不可見(jiàn)excel

        ????add_book
        ????True:打開(kāi)excel并且新建工作簿
        ??? False:不新建工作簿
        ????"""

        ????app?=?xw.App(visible=True,?add_book=False)

        ????#?新建工作簿?(如果不接下一條代碼的話,Excel只會(huì)一閃而過(guò),賣(mài)個(gè)萌就走了)
        ????wb?=?app.books.add()

        ????#?保存工作簿
        ????wb.save('example.xlsx')

        ????#?退出工作簿
        ????wb.close()

        ????#?退出Excel
        ????app.quit()
        執(zhí)行程序后文件夾增加了“example.xlsx”:fbcef95c67388506b875e050855dddf9.webp此時(shí)表格是空的:464f1fafb0547c078c0725d67875d5c0.webp2. xlwings 打開(kāi)已存在的 Excel 文檔現(xiàn)有表格長(zhǎng)這樣:90d0a78a1ca90c953cd9077e3157bca4.webp運(yùn)行程序:
        #?3.4.3?xlwings?打開(kāi)已存在的Excel文件
        def?fun3_4_3():
        ????#?新建Excle 默認(rèn)設(shè)置:程序可見(jiàn),只打開(kāi)不新建工作薄,屏幕更新關(guān)閉
        ????app?=?xw.App(visible=True,?add_book=False)
        ????app.display_alerts?=?False
        ????app.screen_updating?=?False

        ????#?打開(kāi)已存在的Excel文件
        ????wb=app.books.open('./3_4?xlwings?修改操作練習(xí).xlsx')

        ????#?保存工作簿
        ????wb.save('example_2.xlsx')

        ????#?退出工作簿
        ????wb.close()

        ????#?退出Excel
        ????app.quit()
        生成新的表格:7f11d9d644daf59d8782f7856f0ca68f.webp內(nèi)容如下:d99be4853b83a933d381c1274acd891e.webp3. xlwings 讀寫(xiě) Excel程序示例:
        #??3.4.4?xlwings讀寫(xiě)?Excel
        def?fun3_4_4():
        ????#?新建Excle 默認(rèn)設(shè)置:程序可見(jiàn),只打開(kāi)不新建工作薄,屏幕更新關(guān)閉
        ????app?=?xw.App(visible=True,?add_book=False)
        ????app.display_alerts?=?False
        ????app.screen_updating?=?False

        ????#?打開(kāi)已存在的Excel文件
        ????wb=app.books.open('./3_4?xlwings?修改操作練習(xí).xlsx')

        ????#?獲取sheet對(duì)象
        ????print(wb.sheets)
        ????sheet?=?wb.sheets[0]
        ????#?sheet?=?wb.sheets["sheet1"]

        ????#?讀取Excel信息
        ????cellB1_value?=?sheet.range('B1').value
        ????print("單元格B1內(nèi)容為:",cellB1_value)

        ????#?清除單元格內(nèi)容和格式
        ????sheet.range('A1').clear()

        ????#?寫(xiě)入單元格
        ????sheet.range('A1').value?=?"xlwings寫(xiě)入"

        ????#?保存工作簿
        ????wb.save('example_3.xlsx')

        ????#?退出工作簿
        ????wb.close()

        ????#?退出Excel
        ????app.quit()
        執(zhí)行效果:f594913a1cc8e2a45a887c98b1af5882.webpe01cbff524a179361781ae265092728e.webp

        相關(guān)文章閱讀:

        6000字長(zhǎng)文,帶你用Python完成Excel的各種騷操作!
        Python 操作 Excel 庫(kù) xlwings 常用操作詳解!
        詳解 Python 操作 Excel 的各種騷操作!

        5. Python openpyxl 讀取 寫(xiě)入 修改 操作Excel

        在openpyxl中,主要用到三個(gè)概念:Workbooks,Sheets,Cells。
        • Workbook就是一個(gè)excel工作表;

        • Sheet是工作表中的一張表頁(yè);

        • Cell就是簡(jiǎn)單的一個(gè)格。

        openpyxl就是圍繞著這三個(gè)概念進(jìn)行的,不管讀寫(xiě)都是“三板斧”:打開(kāi)Workbook,定位Sheet,操作Cell。官方文檔:https://openpyxl.readthedocs.io/en/stable/官方示例:
        from?openpyxl?import?Workbook
        wb?=?Workbook()

        #?grab?the?active?worksheet
        ws?=?wb.active

        #?Data?can?be?assigned?directly?to?cells
        ws['A1']?=?42

        #?Rows?can?also?be?appended
        ws.append([1,?2,?3])

        #?Python?types?will?automatically?be?converted
        import?datetime
        ws['A2']?=?datetime.datetime.now()

        #?Save?the?file
        wb.save("sample.xlsx")

        5.1 openpyxl 基本操作

        1.安裝
        pip?install?openpyxl
        因?yàn)槲乙呀?jīng)安裝,所以提示如下信息:c08b63eb667f35223969236612d6f5eb.webp2.打開(kāi)文件(1)新建
        from??openpyxl?import??Workbook?
        #?實(shí)例化
        wb?=?Workbook()
        #?激活?worksheet
        ws?=?wb.active
        (2)打開(kāi)已有
        from?openpyxl??import?load_workbook

        wb?=?load_workbook('文件名稱(chēng).xlsx')
        3.寫(xiě)入數(shù)據(jù)
        #?方式一:數(shù)據(jù)可以直接分配到單元格中(可以輸入公式)
        ws['A1']?=?42
        #?方式二:可以附加行,從第一列開(kāi)始附加(從最下方空白處,最左開(kāi)始)(可以輸入多行)
        ws.append([1,?2,?3])
        #?方式三:Python 類(lèi)型會(huì)被自動(dòng)轉(zhuǎn)換
        ws['A3']?=?datetime.datetime.now().strftime("%Y-%m-%d")
        4.創(chuàng)建表(sheet)
        #?方式一:插入到最后(default)
        ws1?=?wb.create_sheet("Mysheet")?
        #?方式二:插入到最開(kāi)始的位置
        ws2?=?wb.create_sheet("Mysheet",?0)
        5.選擇表(sheet)
        #?sheet?名稱(chēng)可以作為?key?進(jìn)行索引
        >>>?ws3?=?wb["New?Title"]
        >>>?ws4?=?wb.get_sheet_by_name("New?Title")
        >>>?ws?is?ws3?is?ws4
        True
        6.查看表名(sheet)
        #?顯示所有表名
        >>>?print(wb.sheetnames)
        ['Sheet2',?'New?Title',??'Sheet1']
        #?遍歷所有表
        >>>?for?sheet?in??wb:
        ...?????print(sheet.title)
        7.訪問(wèn)單元格(cell)(1)單個(gè)單元格訪問(wèn)
        #?方法一
        >>>?c?=?ws['A4']
        #?方法二:row 行;column 列
        >>>?d?=?ws.cell(row=4,?column=2,?value=10)
        #?方法三:只要訪問(wèn)就創(chuàng)建
        >>>?for?i?in??range(1,101):
        ...?????????for?j?in?range(1,101):
        ...????????????ws.cell(row=i,?column=j)
        (2)多個(gè)單元格訪問(wèn)
        #?通過(guò)切片
        >>>?cell_range?=?ws['A1':'C2']
        #?通過(guò)行(列)
        >>>?colC?=?ws['C']
        >>>?col_range?=?ws['C:D']
        >>>?row10?=?ws[10]
        >>>?row_range?=?ws[5:10]
        #?通過(guò)指定范圍(行?→?行)
        >>>?for?row?in??ws.iter_rows(min_row=1,?max_col=3,?max_row=2):
        ...????for?cell?in??row:
        ...????????print(cell)
        <Cell?Sheet1.A1>
        <Cell?Sheet1.B1>
        <Cell?Sheet1.C1>
        <Cell?Sheet1.A2>
        <Cell?Sheet1.B2>
        <Cell?Sheet1.C2>?
        #?通過(guò)指定范圍(列?→?列)
        >>>?for?row?in??ws.iter_rows(min_row=1,?max_col=3,?max_row=2):
        ...????for?cell?in??row:
        ...????????print(cell)
        <Cell?Sheet1.A1>
        <Cell?Sheet1.B1>
        <Cell?Sheet1.C1>
        <Cell?Sheet1.A2>
        <Cell?Sheet1.B2>
        <Cell?Sheet1.C2>
        #?遍歷所有?方法一
        >>>?ws?=?wb.active
        >>>?ws['C9']?=?'hello?world'
        >>>?tuple(ws.rows)
        ((<Cell?Sheet.A1>,?<Cell?Sheet.B1>,?<Cell?Sheet.C1>),
        (<Cell?Sheet.A2>,?<Cell?Sheet.B2>,?<Cell?Sheet.C2>),
        ...
        (<Cell?Sheet.A8>,?<Cell?Sheet.B8>,?<Cell?Sheet.C8>),
        (<Cell?Sheet.A9>,?<Cell?Sheet.B9>,?<Cell?Sheet.C9>))
        #?遍歷所有?方法二
        >>>?tuple(ws.columns)
        ((<Cell?Sheet.A1>,
        <Cell?Sheet.A2>,
        <Cell?Sheet.A3>,
        ...
        <Cell?Sheet.B7>,
        <Cell?Sheet.B8>,
        <Cell?Sheet.B9>),
        (<Cell?Sheet.C1>,
        ...
        <Cell?Sheet.C8>,
        <Cell?Sheet.C9>))
        8.保存數(shù)據(jù)
        wb.save('文件名稱(chēng).xlsx')
        9.其它(1)改變sheet標(biāo)簽按鈕顏色
        ws.sheet_properties.tabColor?=?"1072BA"?#?色值為RGB16進(jìn)制值
        (2)獲取最大行,最大列
        #?獲得最大列和最大行
        print(sheet.max_row)
        print(sheet.max_column)
        (3)獲取每一行每一列
        • sheet.rows為生成器, 里面是每一行的數(shù)據(jù),每一行又由一個(gè)tuple包裹。

        • sheet.columns類(lèi)似,不過(guò)里面是每個(gè)tuple是每一列的單元格。

        #?因?yàn)榘葱校苑祷谹1,?B1,?C1這樣的順序
        for?row?in?sheet.rows:
        ????for?cell?in?row:
        ????????print(cell.value)

        #?A1,?A2,?A3這樣的順序
        for?column?in?sheet.columns:
        ????for?cell?in?column:
        ????????print(cell.value)
        (4)根據(jù)數(shù)字得到字母,根據(jù)字母得到數(shù)字
        from?openpyxl.utils?import?get_column_letter,?column_index_from_string

        #?根據(jù)列的數(shù)字返回字母
        print(get_column_letter(2))??#?B
        #?根據(jù)字母返回列的數(shù)字
        print(column_index_from_string('D'))??#?4
        (5)刪除工作表
        #?方式一
        wb.remove(sheet)
        #?方式二
        del?wb[sheet]
        (6)矩陣置換
        rows?=?[
        ????['Number',?'data1',?'data2'],
        ????[2,?40,?30],
        ????[3,?40,?25],
        ????[4,?50,?30],
        ????[5,?30,?10],
        ????[6,?25,?5],
        ????[7,?50,?10]]

        list(zip(*rows))

        #?out
        [('Number',?2,?3,?4,?5,?6,?7),
        ?('data1',?40,?40,?50,?30,?25,?50),
        ?('data2',?30,?25,?30,?10,?5,?10)]

        #?注意?方法會(huì)舍棄缺少數(shù)據(jù)的列(行)
        rows?=?[
        ????['Number',?'data1',?'data2'],
        ????[2,?40??????],????#?這里少一個(gè)數(shù)據(jù)
        ????[3,?40,?25],
        ????[4,?50,?30],
        ????[5,?30,?10],
        ????[6,?25,?5],
        ????[7,?50,?10],
        ]
        #?out
        [('Number',?2,?3,?4,?5,?6,?7),?('data1',?40,?40,?50,?30,?25,?50)]
        10.設(shè)置單元格風(fēng)格(1)需要導(dǎo)入的類(lèi)
        from?openpyxl.styles?import?Font,?colors,?Alignment
        (2)字體
        • 下面的代碼指定了等線24號(hào),加粗斜體,字體顏色紅色。直接使用cell的font屬性,將Font對(duì)象賦值給它。

        bold_itatic_24_font?=?Font(name='等線',?size=24,?italic=True,?color=colors.RED,?bold=True)

        sheet['A1'].font?=?bold_itatic_24_font
        (3)對(duì)齊方式
        • 也是直接使用cell的屬性aligment,這里指定垂直居中和水平居中。除了center,還可以使用right、left等等參數(shù)

        #?設(shè)置B1中的數(shù)據(jù)垂直居中和水平居中
        sheet['B1'].alignment?=?Alignment(horizontal='center',?vertical='center')
        (4)設(shè)置行高和列寬
        #?第2行行高
        sheet.row_dimensions[2].height?=?40
        #?C列列寬
        sheet.column_dimensions['C'].width?=?30
        (5)合并和拆分單元格
        • 所謂合并單元格,即以合并區(qū)域的左上角的那個(gè)單元格為基準(zhǔn),覆蓋其他單元格使之稱(chēng)為一個(gè)大的單元格。
        • 相反,拆分單元格后將這個(gè)大單元格的值返回到原來(lái)的左上角位置。
        #?合并單元格,?往左上角寫(xiě)入數(shù)據(jù)即可
        sheet.merge_cells('B1:G1')?#?合并一行中的幾個(gè)單元格
        sheet.merge_cells('A1:C3')?#?合并一個(gè)矩形區(qū)域中的單元格
        • 合并后只可以往左上角寫(xiě)入數(shù)據(jù),也就是區(qū)間中:左邊的坐標(biāo)。
        • 如果這些要合并的單元格都有數(shù)據(jù),只會(huì)保留左上角的數(shù)據(jù),其他則丟棄。換句話說(shuō)若合并前不是在左上角寫(xiě)入數(shù)據(jù),合并后單元格中不會(huì)有數(shù)據(jù)。
        • 以下是拆分單元格的代碼。拆分后,值回到A1位置
        sheet.unmerge_cells('A1:C3')
        11.示例代碼
        import?datetime
        from?random?import?choice
        from?time?import?time
        from?openpyxl?import?load_workbook
        from?openpyxl.utils?import?get_column_letter

        #?設(shè)置文件?mingc
        addr?=?"openpyxl.xlsx"
        #?打開(kāi)文件
        wb?=?load_workbook(addr)
        #?創(chuàng)建一張新表
        ws?=?wb.create_sheet()
        #?第一行輸入
        ws.append(['TIME',?'TITLE',?'A-Z'])

        #?輸入內(nèi)容(500行數(shù)據(jù))
        for?i?in?range(500):
        ????TIME?=?datetime.datetime.now().strftime("%H:%M:%S")
        ????TITLE?=?str(time())
        ????A_Z?=?get_column_letter(choice(range(1,?50)))
        ????ws.append([TIME,?TITLE,?A_Z])

        #?獲取最大行
        row_max?=?ws.max_row
        #?獲取最大列
        con_max?=?ws.max_column
        #?把上面寫(xiě)入內(nèi)容打印在控制臺(tái)
        for?j?in?ws.rows:????#?we.rows?獲取每一行數(shù)據(jù)
        ????for?n?in?j:
        ????????print(n.value,?end="\t")???#?n.value?獲取單元格的值
        ????print()
        #?保存,save(必須要寫(xiě)文件名(絕對(duì)地址)默認(rèn)?py?同級(jí)目錄下,只支持?xlsx?格式)
        wb.save(addr)

        5.2 openpyxl生成2D圖表

        示例代碼:
        from?openpyxl?import?Workbook
        from?openpyxl.chart?import?BarChart,?Series,?Reference

        wb?=?Workbook(write_only=True)
        ws?=?wb.create_sheet()

        rows?=?[
        ????('Number',?'Batch?1',?'Batch?2'),
        ????(2,?10,?30),
        ????(3,?40,?60),
        ????(4,?50,?70),
        ????(5,?20,?10),
        ????(6,?10,?40),
        ????(7,?50,?30),
        ]

        for?row?in?rows:
        ????ws.append(row)

        chart1?=?BarChart()
        chart1.type?=?"col"
        chart1.style?=?10
        chart1.title?=?"Bar?Chart"
        chart1.y_axis.title?=?'Test?number'
        chart1.x_axis.title?=?'Sample?length?(mm)'

        data?=?Reference(ws,?min_col=2,?min_row=1,?max_row=7,?max_col=3)
        cats?=?Reference(ws,?min_col=1,?min_row=2,?max_row=7)
        chart1.add_data(data,?titles_from_data=True)
        chart1.set_categories(cats)
        chart1.shape?=?4
        ws.add_chart(chart1,?"A10")

        from?copy?import?deepcopy

        chart2?=?deepcopy(chart1)
        chart2.style?=?11
        chart2.type?=?"bar"
        chart2.title?=?"Horizontal?Bar?Chart"
        ws.add_chart(chart2,?"G10")

        chart3?=?deepcopy(chart1)
        chart3.type?=?"col"
        chart3.style?=?12
        chart3.grouping?=?"stacked"
        chart3.overlap?=?100
        chart3.title?=?'Stacked?Chart'
        ws.add_chart(chart3,?"A27")

        chart4?=?deepcopy(chart1)
        chart4.type?=?"bar"
        chart4.style?=?13
        chart4.grouping?=?"percentStacked"
        chart4.overlap?=?100
        chart4.title?=?'Percent?Stacked?Chart'
        ws.add_chart(chart4,?"G27")

        wb.save("bar.xlsx")
        效果如下:8052f7fd068577a01a8fe2be0c6e8070.webp

        5.3 openpyxl生成3D圖表

        示例代碼:
        from?openpyxl?import?Workbook
        from?openpyxl.chart?import?(
        ????Reference,
        ????Series,
        ????BarChart3D,
        )

        wb?=?Workbook()
        ws?=?wb.active

        rows?=?[
        ????(None,?2013,?2014),
        ????("Apples",?5,?4),
        ????("Oranges",?6,?2),
        ????("Pears",?8,?3)
        ]

        for?row?in?rows:
        ????ws.append(row)

        data?=?Reference(ws,?min_col=2,?min_row=1,?max_col=3,?max_row=4)
        titles?=?Reference(ws,?min_col=1,?min_row=2,?max_row=4)
        chart?=?BarChart3D()
        chart.title?=?"3D?Bar?Chart"
        chart.add_data(data=data,?titles_from_data=True)
        chart.set_categories(titles)

        ws.add_chart(chart,?"E5")
        wb.save("bar3d.xlsx")
        效果如下:c6f4cc66f1f835b8eaf1b5f64ae27daf.webp

        5.4 實(shí)戰(zhàn)訓(xùn)練

        1.openpyxl 新建Excel程序示例:
        #?3.5.2?openpyxl?新建Excel
        def?fun3_5_2():
        ????wb?=?Workbook()

        ????#?注意:該函數(shù)調(diào)用工作表的索引(_active_sheet_index),默認(rèn)是0。
        ????#?除非你修改了這個(gè)值,否則你使用該函數(shù)一直是在對(duì)第一張工作表進(jìn)行操作。
        ????ws?=?wb.active

        ????#?設(shè)置sheet名稱(chēng)
        ????ws.title?=?"New?Title"

        ????#?設(shè)置sheet顏色
        ????ws.sheet_properties.tabColor?=?"1072BA"

        ????#?保存表格
        ????wb.save('保存一個(gè)新的excel.xlsx')
        執(zhí)行效果:a7a8528b77a128fad986466e4a8bb5ad.webp并對(duì)sheet設(shè)置了標(biāo)題和背景顏色:262234fea50b733805100e126fc3bd2d.webp2.openpyxl 打開(kāi)已存在Excel程序示例:
        #?3.5.3?openpyxl?打開(kāi)已存在Excel
        def?fun3_5_3():
        ????wb?=?load_workbook("./3_5?openpyxl?修改操作練習(xí).xlsx")

        ????#?注意:該函數(shù)調(diào)用工作表的索引(_active_sheet_index),默認(rèn)是0。
        ????#?除非你修改了這個(gè)值,否則你使用該函數(shù)一直是在對(duì)第一張工作表進(jìn)行操作。
        ????ws?=?wb.active

        ????#?保存表格
        ????wb.save('copy.xlsx')
        效果如下:d791820bc1caaad4a6f36ea625592bca.webp3.openpyxl 讀寫(xiě)Excel程序示例:
        #?3.5.4?openpyxl?讀寫(xiě)Excel
        def?fun3_5_4():
        ????wb?=?load_workbook("./3_5?openpyxl?修改操作練習(xí).xlsx")

        ????#?注意:該函數(shù)調(diào)用工作表的索引(_active_sheet_index),默認(rèn)是0。
        ????#?除非你修改了這個(gè)值,否則你使用該函數(shù)一直是在對(duì)第一張工作表進(jìn)行操作。
        ????ws?=?wb.active

        ????#?讀取單元格信息
        ????cellB2_value?=?ws['B2'].value
        ????print("單元格B2內(nèi)容為:",cellB2_value)

        ????#?寫(xiě)入單元格
        ????ws['A1'].value?=?"OPENPYXL"

        ????#?保存表格
        ????wb.save('copy.xlsx')
        執(zhí)行結(jié)果:abe3df190ade39b7f970b8676b2cb535.webp3804224d2d0ba800e982cd49ae17faed.webp

        6. Python xlswriter 寫(xiě)入 操作Excel

        • XlsxWriter是一個(gè)用來(lái)寫(xiě)Excel2007和xlsx文件格式的python模塊。它可以用來(lái)寫(xiě)文本、數(shù)字、公式并支持單元格格式化、圖片、圖表、文檔配置、自動(dòng)過(guò)濾等特性

        • 優(yōu)點(diǎn):功能更多、文檔高保真、擴(kuò)展格式類(lèi)型、更快并可配置 缺點(diǎn):不能用來(lái)讀取和修改excel文件

        官方文檔:https://xlsxwriter.readthedocs.io/

        6.1 xlswriter基本操作

        1.安裝 xlswriter 模塊
        pip?install?XlsxWriter
        由于我已經(jīng)安裝過(guò)了,所以提示已經(jīng)安裝:d894f6ee2aea24d9535fcca78beb3015.webp2.創(chuàng)建excel文件
        #?創(chuàng)建文件
        workbook?=?xlsxwriter.Workbook("new_excel.xlsx")?
        3.創(chuàng)建sheet
        #?創(chuàng)建sheet
        worksheet?=?workbook.add_worksheet("first_sheet")?
        4.寫(xiě)入數(shù)據(jù)(1)寫(xiě)入文本
        #?法一:
        worksheet.write('A1',?'write?something')
        #?法二:
        worksheet.write(1,?0,?'hello?world')
        (2)寫(xiě)入數(shù)字
        #?寫(xiě)入數(shù)字
        worksheet.write(0,?1,?32)
        worksheet.write(1,?1,?32.3)
        (3)寫(xiě)入函數(shù)
        worksheet.write(2,?1,?'=sum(B1:B2)')
        (4)寫(xiě)入圖片
        #?插入圖片
        worksheet.insert_image(0,?5,?'test.png')
        worksheet.insert_image(0,?5,?'test.png',?{'url':?'http://httpbin.org/'})
        (5)寫(xiě)入日期
        #?寫(xiě)入日期
        d?=?workbook.add_format({'num_format':?'yyyy-mm-dd'})
        worksheet.write(0,?2,?datetime.datetime.strptime('2017-09-13',?'%Y-%m-%d'),?d)
        (6)設(shè)置行、列屬性
        #?設(shè)置行屬性,行高設(shè)置為40
        worksheet.set_row(0,?40)

        #?設(shè)置列屬性,把A到B列寬設(shè)置為20
        worksheet.set_column('A:B',?20)
        5.自定義格式常用格式:
        • 字體顏色:color
        • 字體加粗:bold
        • 字體大?。篺ont_site
        • 日期格式:num_format
        • 超鏈接:url
        • 下劃線設(shè)置:underline
        • 單元格顏色:bg_color
        • 邊框:border
        • 對(duì)齊方式:align
        #?自定義格式
        f?=?workbook.add_format({'border':?1,?'font_size':?13,?'bold':?True,?'align':?'center','bg_color':?'cccccc'})
        worksheet.write('A3',?"python?excel",?f)
        worksheet.set_row(0,?40,?f)
        worksheet.set_column('A:E',?20,?f)
        6.批量往單元格寫(xiě)入數(shù)據(jù)
        #?批量往單元格寫(xiě)入數(shù)據(jù)
        worksheet.write_column('A15',?[1,?2,?3,?4,?5])??#?列寫(xiě)入,從A15開(kāi)始
        worksheet.write_row('A12',?[6,?7,?8,?9])????????#?行寫(xiě)入,從A12開(kāi)始
        7.合并單元格寫(xiě)入
        #?合并單元格寫(xiě)入
        worksheet.merge_range(7,5,?11,?8,?'merge_range')
        8.關(guān)閉文件
        workbook.close()

        6.3 xlswriter 生成折線圖

        示例代碼:
        #?-*-?coding:utf-8?-*-

        import?xlsxwriter

        #?創(chuàng)建一個(gè)excel
        workbook?=?xlsxwriter.Workbook("chart_line.xlsx")
        #?創(chuàng)建一個(gè)sheet
        worksheet?=?workbook.add_worksheet()
        #?worksheet?=?workbook.add_worksheet("bug_analysis")

        #?自定義樣式,加粗
        bold?=?workbook.add_format({'bold':?1})

        #?--------1、準(zhǔn)備數(shù)據(jù)并寫(xiě)入excel---------------
        #?向excel中寫(xiě)入數(shù)據(jù),建立圖標(biāo)時(shí)要用到
        headings?=?['Number',?'testA',?'testB']
        data?=?[
        ????['2017-9-1',?'2017-9-2',?'2017-9-3',?'2017-9-4',?'2017-9-5',?'2017-9-6'],
        ????[10,?40,?50,?20,?10,?50],
        ????[30,?60,?70,?50,?40,?30],
        ]

        #?寫(xiě)入表頭
        worksheet.write_row('A1',?headings,?bold)

        #?寫(xiě)入數(shù)據(jù)
        worksheet.write_column('A2',?data[0])
        worksheet.write_column('B2',?data[1])
        worksheet.write_column('C2',?data[2])

        #?--------2、生成圖表并插入到excel---------------
        #?創(chuàng)建一個(gè)柱狀圖(line?chart)
        chart_col?=?workbook.add_chart({'type':?'line'})

        #?配置第一個(gè)系列數(shù)據(jù)
        chart_col.add_series({
        ????#?這里的sheet1是默認(rèn)的值,因?yàn)槲覀冊(cè)谛陆╯heet時(shí)沒(méi)有指定sheet名
        ????#?如果我們新建sheet時(shí)設(shè)置了sheet名,這里就要設(shè)置成相應(yīng)的值
        ????'name':?'=Sheet1!$B$1',
        ????'categories':?'=Sheet1!$A$2:$A$7',
        ????'values':???'=Sheet1!$B$2:$B$7',
        ????'line':?{'color':?'red'},
        })

        #?配置第二個(gè)系列數(shù)據(jù)
        chart_col.add_series({
        ????'name':?'=Sheet1!$C$1',
        ????'categories':??'=Sheet1!$A$2:$A$7',
        ????'values':???'=Sheet1!$C$2:$C$7',
        ????'line':?{'color':?'yellow'},
        })

        #?配置第二個(gè)系列數(shù)據(jù)(用了另一種語(yǔ)法)
        #?chart_col.add_series({
        #?????'name':?['Sheet1',?0,?2],
        #?????'categories':?['Sheet1',?1,?0,?6,?0],
        #?????'values':?['Sheet1',?1,?2,?6,?2],
        #?????'line':?{'color':?'yellow'},
        #?})

        #?設(shè)置圖表的title?和?x,y軸信息
        chart_col.set_title({'name':?'The?xxx?site?Bug?Analysis'})
        chart_col.set_x_axis({'name':?'Test?number'})
        chart_col.set_y_axis({'name':??'Sample?length?(mm)'})

        #?設(shè)置圖表的風(fēng)格
        chart_col.set_style(1)

        #?把圖表插入到worksheet并設(shè)置偏移
        worksheet.insert_chart('A10',?chart_col,?{'x_offset':?25,?'y_offset':?10})

        workbook.close()
        效果如下:60a328092f148ccdb998daa82d45c36c.webp

        6.4 xlswriter 生成柱狀圖

        示例代碼:
        #?-*-?coding:utf-8?-*-

        import?xlsxwriter

        #?創(chuàng)建一個(gè)excel
        workbook?=?xlsxwriter.Workbook("chart_column.xlsx")
        #?創(chuàng)建一個(gè)sheet
        worksheet?=?workbook.add_worksheet()
        #?worksheet?=?workbook.add_worksheet("bug_analysis")

        #?自定義樣式,加粗
        bold?=?workbook.add_format({'bold':?1})

        #?--------1、準(zhǔn)備數(shù)據(jù)并寫(xiě)入excel---------------
        #?向excel中寫(xiě)入數(shù)據(jù),建立圖標(biāo)時(shí)要用到
        headings?=?['Number',?'testA',?'testB']
        data?=?[
        ????['2017-9-1',?'2017-9-2',?'2017-9-3',?'2017-9-4',?'2017-9-5',?'2017-9-6'],
        ????[10,?40,?50,?20,?10,?50],
        ????[30,?60,?70,?50,?40,?30],
        ]

        #?寫(xiě)入表頭
        worksheet.write_row('A1',?headings,?bold)

        #?寫(xiě)入數(shù)據(jù)
        worksheet.write_column('A2',?data[0])
        worksheet.write_column('B2',?data[1])
        worksheet.write_column('C2',?data[2])

        #?--------2、生成圖表并插入到excel---------------
        #?創(chuàng)建一個(gè)柱狀圖(column?chart)
        chart_col?=?workbook.add_chart({'type':?'column'})

        #?配置第一個(gè)系列數(shù)據(jù)
        chart_col.add_series({
        ????#?這里的sheet1是默認(rèn)的值,因?yàn)槲覀冊(cè)谛陆╯heet時(shí)沒(méi)有指定sheet名
        ????#?如果我們新建sheet時(shí)設(shè)置了sheet名,這里就要設(shè)置成相應(yīng)的值
        ????'name':?'=Sheet1!$B$1',
        ????'categories':?'=Sheet1!$A$2:$A$7',
        ????'values':???'=Sheet1!$B$2:$B$7',
        ????'line':?{'color':?'red'},
        })

        #?配置第二個(gè)系列數(shù)據(jù)(用了另一種語(yǔ)法)
        chart_col.add_series({
        ????'name':?'=Sheet1!$C$1',
        ????'categories':??'=Sheet1!$A$2:$A$7',
        ????'values':???'=Sheet1!$C$2:$C$7',
        ????'line':?{'color':?'yellow'},
        })

        #?配置第二個(gè)系列數(shù)據(jù)(用了另一種語(yǔ)法)
        #?chart_col.add_series({
        #?????'name':?['Sheet1',?0,?2],
        #?????'categories':?['Sheet1',?1,?0,?6,?0],
        #?????'values':?['Sheet1',?1,?2,?6,?2],
        #?????'line':?{'color':?'yellow'},
        #?})

        #?設(shè)置圖表的title?和?x,y軸信息
        chart_col.set_title({'name':?'The?xxx?site?Bug?Analysis'})
        chart_col.set_x_axis({'name':?'Test?number'})
        chart_col.set_y_axis({'name':??'Sample?length?(mm)'})

        #?設(shè)置圖表的風(fēng)格
        chart_col.set_style(1)

        #?把圖表插入到worksheet以及偏移
        worksheet.insert_chart('A10',?chart_col,?{'x_offset':?25,?'y_offset':?10})

        workbook.close()
        效果如下:91b6a8261fb6f53942bcd0b26d6e7607.webp

        6.5 xlswriter 生成餅圖

        示例代碼:
        #?-*-?coding:utf-8?-*-

        import?xlsxwriter

        #?創(chuàng)建一個(gè)excel
        workbook?=?xlsxwriter.Workbook("chart_pie.xlsx")
        #?創(chuàng)建一個(gè)sheet
        worksheet?=?workbook.add_worksheet()

        #?自定義樣式,加粗
        bold?=?workbook.add_format({'bold':?1})

        #?--------1、準(zhǔn)備數(shù)據(jù)并寫(xiě)入excel---------------
        #?向excel中寫(xiě)入數(shù)據(jù),建立圖標(biāo)時(shí)要用到
        data?=?[
        ????['closed',?'active',?'reopen',?'NT'],
        ????[1012,?109,?123,?131],
        ]

        #?寫(xiě)入數(shù)據(jù)
        worksheet.write_row('A1',?data[0],?bold)
        worksheet.write_row('A2',?data[1])

        #?--------2、生成圖表并插入到excel---------------
        #?創(chuàng)建一個(gè)柱狀圖(pie?chart)
        chart_col?=?workbook.add_chart({'type':?'pie'})

        #?配置第一個(gè)系列數(shù)據(jù)
        chart_col.add_series({
        ????'name':?'Bug?Analysis',
        ????'categories':?'=Sheet1!$A$1:$D$1',
        ????'values':?'=Sheet1!$A$2:$D$2',
        ????'points':?[
        ????????{'fill':?{'color':?'#00CD00'}},
        ????????{'fill':?{'color':?'red'}},
        ????????{'fill':?{'color':?'yellow'}},
        ????????{'fill':?{'color':?'gray'}},
        ????],

        })

        #?設(shè)置圖表的title?和?x,y軸信息
        chart_col.set_title({'name':?'Bug?Analysis'})

        #?設(shè)置圖表的風(fēng)格
        chart_col.set_style(10)

        #?把圖表插入到worksheet以及偏移
        worksheet.insert_chart('B10',?chart_col,?{'x_offset':?25,?'y_offset':?10})
        workbook.close()
        效果如下:a8691870277ffafb16e75ef04237c810.webp

        6.6 實(shí)戰(zhàn)訓(xùn)練

        1.xlswriter新建并寫(xiě)入Excel程序示例:
        #?3.6.2?xlswriter新建并寫(xiě)入Excel
        def?fun3_6_2():
        ????#?創(chuàng)建Exce并添加sheet
        ????workbook?=?xlsxwriter.Workbook('demo.xlsx')
        ????worksheet?=?workbook.add_worksheet()

        ????#?設(shè)置列寬
        ????worksheet.set_column('A:A',?20)

        ????#?設(shè)置格式
        ????bold?=?workbook.add_format({'bold':?True})

        ????#?添加文字內(nèi)容
        ????worksheet.write('A1',?'Hello')

        ????#?按格式添加內(nèi)容
        ????worksheet.write('A2',?'World',?bold)

        ????#?寫(xiě)一些數(shù)字
        ????worksheet.write(2,?0,?123)
        ????worksheet.write(3,?0,?123.456)

        ????#?添加圖片
        ????worksheet.insert_image('B5',?'demo.png')

        ????workbook.close()
        效果如下:68d83f8c49b44a71802856766bf46abd.webp

        7. Python win32com 讀取 寫(xiě)入 修改 操作Excel

        python可以使用一個(gè)第三方庫(kù)叫做win32com達(dá)到操作com的目的,win32com功能強(qiáng)大,可以操作word、調(diào)用宏等等等。

        7.1 pip安裝win32com

        pip?install?pypiwin32
        由于我已經(jīng)安裝過(guò)了,所以提示已經(jīng)安裝:43accf4a6ab5d8fd150d2eb689fe7876.webp

        7.2 Python使用win32com讀寫(xiě)Excel

        程序示例:
        import?win32com
        from?win32com.client?import?Dispatch,?constants
        import?os

        #?獲取當(dāng)前腳本路徑
        def?getScriptPath():
        ????nowpath?=?os.path.split(os.path.realpath(__file__))[0]
        ????print(nowpath)
        ????return?nowpath

        #?3.7.2?Python使用win32com讀寫(xiě)Excel
        def?fun3_7_2():
        ????app?=?win32com.client.Dispatch('Excel.Application')

        ????#?后臺(tái)運(yùn)行,不顯示,不警告
        ????app.Visible?=?0
        ????app.DisplayAlerts?=?0

        ????#?創(chuàng)建新的Excel
        ????#?WorkBook?=?app.Workbooks.Add()
        ????#?新建sheet
        ????#?sheet?=?WorkBook.Worksheets.Add()

        ????#?打開(kāi)已存在表格,注意這里要用絕對(duì)路徑
        ????WorkBook?=?app.Workbooks.Open(getScriptPath()?+?"\\3_7?win32com?修改操作練習(xí).xlsx")
        ????sheet?=?WorkBook.Worksheets('Sheet1')

        ????#?獲取單元格信息?第n行n列,不用-1
        ????cell01_value?=?sheet.Cells(1,2).Value
        ????print("cell01的內(nèi)容為:",cell01_value)

        ????#?寫(xiě)入表格信息
        ????sheet.Cells(2,?1).Value?=?"win32com"

        ????#?保存表格
        ????#WorkBook.Save()

        ????#?另存為實(shí)現(xiàn)拷貝
        ????WorkBook.SaveAs(getScriptPath()?+?"\\new.xlsx")

        ????#?關(guān)閉表格
        ????WorkBook.Close()
        ????app.Quit()


        if?__name__?==?'__main__':
        ????fun3_7_2()
        效果如下:c6daa5d4e13cc4159db1bbb3ec38a298.webp內(nèi)容為:13b847d841a4d7e69f09f336fa6c6ca4.webp

        8. Python pandas 讀取 寫(xiě)入 操作Excel

        簡(jiǎn)介:pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas 納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會(huì)發(fā)現(xiàn),它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。官方網(wǎng)站:https://pandas.pydata.org/官方文檔:https://pandas.pydata.org/pandas-docs/stable/

        8.1 pip安裝pandas

        pip?install?pandas

        8.2 pandas 讀寫(xiě) Excel

        表格內(nèi)容如下:aee9161001a185d3b9b7052a5810e172.webp程序示例:
        import?pandas?as?pd
        from?pandas?import?DataFrame

        #?3.8.2?pandas讀寫(xiě)Excel
        def?fun3_8_2():
        ????data?=?pd.read_excel('3_8?pandas?修改操作練習(xí).xlsx',?sheet_name='Sheet1')
        ????print(data)

        ????#?增加行數(shù)據(jù),在第5行新增
        ????data.loc[4]?=?['4',?'john',?'pandas']

        ????#?增加列數(shù)據(jù),給定默認(rèn)值None
        ????data['new_col']?=?None

        ????#?保存數(shù)據(jù)
        ????DataFrame(data).to_excel('new.xlsx',?sheet_name='Sheet1',?index=False,?header=True)


        if?__name__?==?'__main__':
        ????fun3_8_2()
        效果如下:14234cc42638e3eb89df622dfe191b62.webp生成的excel如下:7cc9579727bc8ac06396180079ba08e2.webppandas功能非常強(qiáng)大,這里只是做了又給很簡(jiǎn)單的示例,還有很多其它操作,可參考官方文檔或快速入門(mén)進(jìn)行學(xué)習(xí)。
        瀏覽 73
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            美女岔开腿让男生桶动态图 | 无码人妻丰满熟妇区二区蜜桃免费 | 最新亚洲中文字幕 | 白丝校花被狂揉大胸羞羞 | 扒开双腿抽打花蒂惩罚小说 | 大鸡吧操 | 国产三级片无码 | 翔田千里系列无码流出 | 久操福利视频 | 日韩精品视频在线观看免费 |