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

          Python辦公自動化之Excel報表自動化,看這一篇就夠了!

          共 36664字,需瀏覽 74分鐘

           ·

          2021-07-13 03:13

          3e59cb36b94ebaf097d049afff9e5628.webp

          作者:超級大洋蔥806

          來源:https://blog.csdn.net/u014779536/article/details/108182833

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

          0. Python Excel庫對比

          我們先來看一下python中能操作Excel的庫對比(一共九個庫):d937ec386afeb7fd69e31179689c9328.webp

          1. Python xlrd 讀取 操作Excel

          1.1 xlrd模塊介紹

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          #?獲取單個表格值?(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 寫入 操作Excel(僅限xls格式!)

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

          2.1 pip安裝xlwt

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

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

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

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

          ????#?往表格寫入內(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(其實就是創(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

          ????#?往表格寫入內(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中列寬的值表示方法:默認字體0的1/256為衡量單位。xlwt創(chuàng)建時使用的默認寬度為2960,既11個字符0的寬度所以我們在設(shè)置列寬時可以用如下方法:width = 256 * 20 256為衡量單位,20表示20個字符寬度程序示例:
          #?3.2.4?設(shè)置列寬
          def?fun3_2_4():
          ????#?創(chuàng)建新的workbook(其實就是創(chuàng)建新的excel)
          ????workbook?=?xlwt.Workbook(encoding=?'ascii')

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

          ????#?往表格寫入內(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中沒有特定的函數(shù)來設(shè)置默認的列寬及行高行高是在單元格的樣式中設(shè)置的,你可以通過自動換行通過輸入文字的多少來確定行高程序示例:
          #?3.2.5?設(shè)置行高
          def?fun3_2_5():
          ????#?創(chuàng)建新的workbook(其實就是創(chuàng)建新的excel)
          ????workbook?=?xlwt.Workbook(encoding=?'ascii')

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

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

          ????#?設(shè)置行高
          ????style?=?xlwt.easyxf('font:height?360;')??#?18pt,類型小初的字號
          ????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(其實就是創(chuàng)建新的excel)
          ????workbook?=?xlwt.Workbook(encoding=?'ascii')

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

          ????#?往表格寫入內(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(其實就是創(chuàng)建新的excel)
          ????workbook?=?xlwt.Workbook(encoding=?'ascii')

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

          ????#?往表格寫入內(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沒有
          ????#?THIN實線
          ????
          ????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(其實就是創(chuàng)建新的excel)
          ????workbook?=?xlwt.Workbook(encoding=?'ascii')

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

          ????#?往表格寫入內(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è)置單元格對齊

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

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

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

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

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

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

          3. Python xlutils 修改 操作Excel

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

          3.1 pip安裝xlutils

          pip?install?xlutils
          安裝過程:3fbb2b50801db2d2f9d1be04813a962c.webp

          3.2 xlutils拷貝源文件(需配合xlrd使用)

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

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

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

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

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

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

          4. Python xlwings 讀取 寫入 修改 操作Excel

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

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

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

          • 開源免費,一直在更新

          官網(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 基本操作

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

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

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

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

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

          #其中需要注意的是單元格的完全引用路徑是:
          #?第一個Excel程序的第一個工作薄的第一張sheet的第一個單元格
          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:?對于單元格也可以用表示行列的tuple進行引用
          #?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 寫入&讀取數(shù)據(jù)

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

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

          sht.range('a6').expand('table').value?=?[['a','b','c'],['d','e','f'],['g','h','i']]
          2.讀取數(shù)據(jù)(1)讀取單個值
          #?將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ù)
          先計算單元格的行數(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[‘工作簿名稱']
          • wb.activate() 激活為當(dāng)前工作簿
          • wb.fullname 返回工作簿的絕對路徑
          • wb.name 返回工作簿的名稱
          • wb.save(path=None) 保存工作簿,默認路徑為工作簿原路徑,若未保存則為腳本所在的路徑
          • wb. close() 關(guān)閉工作簿
          代碼示例:
          #?引用Excel程序中,當(dāng)前的工作簿
          wb=xw.books.acitve
          #?返回工作簿的絕對路徑
          x=wb.fullname
          #?返回工作簿的名稱
          x=wb.name
          #?保存工作簿,默認路徑為工作簿原路徑,若未保存則為腳本所在的路徑
          x=wb.save(path=None)
          #?關(guān)閉工作簿
          x=wb.close()
          2.sheet常用的api
          #?引用某指定sheet
          sht=xw.books['工作簿名稱'].sheets['sheet的名稱']
          #?激活sheet為活動工作表
          sht.activate()
          #?清除sheet的內(nèi)容和格式
          sht.clear()
          #?清除sheet的內(nèi)容
          sht.contents()
          #?獲取sheet的名稱
          sht.name
          #?刪除sheet
          sht.delete
          3.range常用的api
          #?引用當(dāng)前活動工作表的單元格
          rng=xw.Range('A1')
          #?加入超鏈接
          # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:點擊即鏈接到百度')
          #?取得當(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
          #?獲得單元格的絕對地址
          rng.get_address(row_absolute=True,?column_absolute=True,include_sheetname=False,?external=False)
          #?獲得列寬
          rng.column_width
          #?返回range的總寬度
          rng.width
          #?獲得range的超鏈接
          rng.hyperlink
          #?獲得range中右下角最后一個單元格
          rng.last_cell
          #?range平移
          rng.offset(row_offset=0,column_offset=0)
          #range進行resize改變range的大小
          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)前活動工作簿
          xw.books.active
          4.sheets 工作表的集合
          #?新建工作表
          xw.sheets.add(name=None,before=None,after=None)
          #?引用當(dāng)前活動sheet
          xw.sheets.active

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

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

          sht=xw.sheets.active

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

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

          #?將1,2,3分別寫入了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生成圖表

          生成圖表的方法,具體方法也可參見:Python 操作 Excel 庫 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 ??????????????#?用來設(shè)置圖表類型,具體參數(shù)件下面詳細說明。
          chart.api[1].ChartTitle.Text?=?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ù)量'],?['1日',?2],?['2日',?1],?['3日',?3]
          ?????????????,?['4日',?4],?['5日',?5],?['6日',?6]]
          """圖表類型參數(shù),被注釋的那幾個,無法生成對應(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??#?用來生成圖表放置的x坐標(biāo)。
          ??yy?=?y?+?n//3*h???#?用來生成圖表放置的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 實戰(zhàn)訓(xùn)練

          1. xlwings 新建 Excel 文檔

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

          ????add_book
          ????True:打開excel并且新建工作簿
          ??? False:不新建工作簿
          ????"""

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

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

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

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

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

          ????#?打開已存在的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 讀寫 Excel程序示例:
          #??3.4.4?xlwings讀寫?Excel
          def?fun3_4_4():
          ????#?新建Excle 默認設(shè)置:程序可見,只打開不新建工作薄,屏幕更新關(guān)閉
          ????app?=?xw.App(visible=True,?add_book=False)
          ????app.display_alerts?=?False
          ????app.screen_updating?=?False

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

          ????#?獲取sheet對象
          ????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()

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

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

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

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

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

          6000字長文,帶你用Python完成Excel的各種騷操作!
          Python 操作 Excel 庫 xlwings 常用操作詳解!
          詳解 Python 操作 Excel 的各種騷操作!

          5. Python openpyxl 讀取 寫入 修改 操作Excel

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

          • Sheet是工作表中的一張表頁;

          • Cell就是簡單的一個格。

          openpyxl就是圍繞著這三個概念進行的,不管讀寫都是“三板斧”:打開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
          因為我已經(jīng)安裝,所以提示如下信息:c08b63eb667f35223969236612d6f5eb.webp2.打開文件(1)新建
          from??openpyxl?import??Workbook?
          #?實例化
          wb?=?Workbook()
          #?激活?worksheet
          ws?=?wb.active
          (2)打開已有
          from?openpyxl??import?load_workbook

          wb?=?load_workbook('文件名稱.xlsx')
          3.寫入數(shù)據(jù)
          #?方式一:數(shù)據(jù)可以直接分配到單元格中(可以輸入公式)
          ws['A1']?=?42
          #?方式二:可以附加行,從第一列開始附加(從最下方空白處,最左開始)(可以輸入多行)
          ws.append([1,?2,?3])
          #?方式三:Python 類型會被自動轉(zhuǎn)換
          ws['A3']?=?datetime.datetime.now().strftime("%Y-%m-%d")
          4.創(chuàng)建表(sheet)
          #?方式一:插入到最后(default)
          ws1?=?wb.create_sheet("Mysheet")?
          #?方式二:插入到最開始的位置
          ws2?=?wb.create_sheet("Mysheet",?0)
          5.選擇表(sheet)
          #?sheet?名稱可以作為?key?進行索引
          >>>?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.訪問單元格(cell)(1)單個單元格訪問
          #?方法一
          >>>?c?=?ws['A4']
          #?方法二:row 行;column 列
          >>>?d?=?ws.cell(row=4,?column=2,?value=10)
          #?方法三:只要訪問就創(chuàng)建
          >>>?for?i?in??range(1,101):
          ...?????????for?j?in?range(1,101):
          ...????????????ws.cell(row=i,?column=j)
          (2)多個單元格訪問
          #?通過切片
          >>>?cell_range?=?ws['A1':'C2']
          #?通過行(列)
          >>>?colC?=?ws['C']
          >>>?col_range?=?ws['C:D']
          >>>?row10?=?ws[10]
          >>>?row_range?=?ws[5:10]
          #?通過指定范圍(行?→?行)
          >>>?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>?
          #?通過指定范圍(列?→?列)
          >>>?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('文件名稱.xlsx')
          9.其它(1)改變sheet標(biāo)簽按鈕顏色
          ws.sheet_properties.tabColor?=?"1072BA"?#?色值為RGB16進制值
          (2)獲取最大行,最大列
          #?獲得最大列和最大行
          print(sheet.max_row)
          print(sheet.max_column)
          (3)獲取每一行每一列
          • sheet.rows為生成器, 里面是每一行的數(shù)據(jù),每一行又由一個tuple包裹。

          • sheet.columns類似,不過里面是每個tuple是每一列的單元格。

          #?因為按行,所以返回A1,?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)]

          #?注意?方法會舍棄缺少數(shù)據(jù)的列(行)
          rows?=?[
          ????['Number',?'data1',?'data2'],
          ????[2,?40??????],????#?這里少一個數(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)入的類
          from?openpyxl.styles?import?Font,?colors,?Alignment
          (2)字體
          • 下面的代碼指定了等線24號加粗斜體,字體顏色紅色。直接使用cell的font屬性,將Font對象賦值給它。

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

          sheet['A1'].font?=?bold_itatic_24_font
          (3)對齊方式
          • 也是直接使用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ū)域的左上角的那個單元格為基準(zhǔn),覆蓋其他單元格使之稱為一個大的單元格。
          • 相反,拆分單元格后將這個大單元格的值返回到原來的左上角位置。
          #?合并單元格,?往左上角寫入數(shù)據(jù)即可
          sheet.merge_cells('B1:G1')?#?合并一行中的幾個單元格
          sheet.merge_cells('A1:C3')?#?合并一個矩形區(qū)域中的單元格
          • 合并后只可以往左上角寫入數(shù)據(jù),也就是區(qū)間中:左邊的坐標(biāo)。
          • 如果這些要合并的單元格都有數(shù)據(jù),只會保留左上角的數(shù)據(jù),其他則丟棄。換句話說若合并前不是在左上角寫入數(shù)據(jù),合并后單元格中不會有數(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"
          #?打開文件
          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
          #?把上面寫入內(nèi)容打印在控制臺
          for?j?in?ws.rows:????#?we.rows?獲取每一行數(shù)據(jù)
          ????for?n?in?j:
          ????????print(n.value,?end="\t")???#?n.value?獲取單元格的值
          ????print()
          #?保存,save(必須要寫文件名(絕對地址)默認?py?同級目錄下,只支持?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 實戰(zhàn)訓(xùn)練

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

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

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

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

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

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

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

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

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

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

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

          6. Python xlswriter 寫入 操作Excel

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

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

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

          6.1 xlswriter基本操作

          1.安裝 xlswriter 模塊
          pip?install?XlsxWriter
          由于我已經(jīng)安裝過了,所以提示已經(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.寫入數(shù)據(jù)(1)寫入文本
          #?法一:
          worksheet.write('A1',?'write?something')
          #?法二:
          worksheet.write(1,?0,?'hello?world')
          (2)寫入數(shù)字
          #?寫入數(shù)字
          worksheet.write(0,?1,?32)
          worksheet.write(1,?1,?32.3)
          (3)寫入函數(shù)
          worksheet.write(2,?1,?'=sum(B1:B2)')
          (4)寫入圖片
          #?插入圖片
          worksheet.insert_image(0,?5,?'test.png')
          worksheet.insert_image(0,?5,?'test.png',?{'url':?'http://httpbin.org/'})
          (5)寫入日期
          #?寫入日期
          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
          • 字體大小:font_site
          • 日期格式:num_format
          • 超鏈接:url
          • 下劃線設(shè)置:underline
          • 單元格顏色:bg_color
          • 邊框:border
          • 對齊方式: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.批量往單元格寫入數(shù)據(jù)
          #?批量往單元格寫入數(shù)據(jù)
          worksheet.write_column('A15',?[1,?2,?3,?4,?5])??#?列寫入,從A15開始
          worksheet.write_row('A12',?[6,?7,?8,?9])????????#?行寫入,從A12開始
          7.合并單元格寫入
          #?合并單元格寫入
          worksheet.merge_range(7,5,?11,?8,?'merge_range')
          8.關(guān)閉文件
          workbook.close()

          6.3 xlswriter 生成折線圖

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

          import?xlsxwriter

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

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

          #?--------1、準(zhǔn)備數(shù)據(jù)并寫入excel---------------
          #?向excel中寫入數(shù)據(jù),建立圖標(biāo)時要用到
          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],
          ]

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

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

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

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

          #?配置第二個系列數(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'},
          })

          #?配置第二個系列數(shù)據(jù)(用了另一種語法)
          #?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)建一個excel
          workbook?=?xlsxwriter.Workbook("chart_column.xlsx")
          #?創(chuàng)建一個sheet
          worksheet?=?workbook.add_worksheet()
          #?worksheet?=?workbook.add_worksheet("bug_analysis")

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

          #?--------1、準(zhǔn)備數(shù)據(jù)并寫入excel---------------
          #?向excel中寫入數(shù)據(jù),建立圖標(biāo)時要用到
          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],
          ]

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

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

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

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

          #?配置第二個系列數(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'},
          })

          #?配置第二個系列數(shù)據(jù)(用了另一種語法)
          #?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)建一個excel
          workbook?=?xlsxwriter.Workbook("chart_pie.xlsx")
          #?創(chuàng)建一個sheet
          worksheet?=?workbook.add_worksheet()

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

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

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

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

          #?配置第一個系列數(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 實戰(zhàn)訓(xùn)練

          1.xlswriter新建并寫入Excel程序示例:
          #?3.6.2?xlswriter新建并寫入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)

          ????#?寫一些數(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 讀取 寫入 修改 操作Excel

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

          7.1 pip安裝win32com

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

          7.2 Python使用win32com讀寫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讀寫Excel
          def?fun3_7_2():
          ????app?=?win32com.client.Dispatch('Excel.Application')

          ????#?后臺運行,不顯示,不警告
          ????app.Visible?=?0
          ????app.DisplayAlerts?=?0

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

          ????#?打開已存在表格,注意這里要用絕對路徑
          ????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)

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

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

          ????#?另存為實現(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 讀取 寫入 操作Excel

          簡介:pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas 納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會發(fā)現(xiàn),它是使Python成為強大而高效的數(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 讀寫 Excel

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

          #?3.8.2?pandas讀寫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ù),給定默認值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功能非常強大,這里只是做了又給很簡單的示例,還有很多其它操作,可參考官方文檔或快速入門進行學(xué)習(xí)。
          瀏覽 73
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  变态重口变态级无码AV | 欧美乱伦性爱 | 亚洲aⅴ| 日韩有码日韩无码 | 国产美女操逼黄站 |