自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

可能是全網(wǎng)最完整的 Python 操作 Excel庫(kù)總結(jié)!

開(kāi)發(fā) 后端
大家好,我是早起。在之前的辦公自動(dòng)化系列文章中,我已經(jīng)對(duì)Python操作Excel的幾個(gè)常用庫(kù)openpyxl、xlrd/xlwt、xlwings、xlsxwriter等進(jìn)行了詳細(xì)的講解。

  大家好,我是早起。

[[384275]]

在之前的辦公自動(dòng)化系列文章中,我已經(jīng)對(duì)Python操作Excel的幾個(gè)常用庫(kù)openpyxl、xlrd/xlwt、xlwings、xlsxwriter等進(jìn)行了詳細(xì)的講解。

為了進(jìn)一步帶大家了解各個(gè)庫(kù)的異同,從而在不同場(chǎng)景下可以靈活使用,本文將橫向比較7個(gè)可以操作 Excel 文件的常用模塊,在比較各模塊常用操作的同時(shí)進(jìn)行鞏固學(xué)習(xí)!

首先讓我們來(lái)整體把握下不同庫(kù)的特點(diǎn)

  1. xlrd、xlwt、xlutils 各自的功能都有局限性,但三者互為補(bǔ)充,覆蓋了Excel文件尤其是 .xls 文件的操作。xlwt 可以生成 .xls 文件,xlrd 可以讀取已經(jīng)存在的 .xls 文件,xlutils 連接 xlrd 和 xlwt 兩個(gè)模塊,使用戶(hù)可以同時(shí)讀寫(xiě)一個(gè) .xls 文件。簡(jiǎn)單來(lái)說(shuō),xlrd 負(fù)責(zé)讀、xlwt 負(fù)責(zé)寫(xiě)、xlutils 負(fù)責(zé)提供輔助和銜接
  2. xlwings 能夠非常方便的讀寫(xiě) Excel 文件中的數(shù)據(jù),并且能夠進(jìn)行單元格格式的修改
  3. XlsxWriter 是一個(gè)用來(lái)寫(xiě) .xlsx 文件格式的模塊。它可以用來(lái)寫(xiě)文本、數(shù)字、公式并支持單元格格式化、圖片、圖表、文檔配置、自動(dòng)過(guò)濾等特性。但不能用來(lái)讀取和修改 Excel 文件
  4. openpyxl 通過(guò) 工作簿 “workbook - 工作表 sheet - 單元格 cell” 的模式對(duì) .xlsx 文件進(jìn)行讀、寫(xiě)、改,并且可以調(diào)整樣式
  5. pandas 大家都不陌生,是進(jìn)行數(shù)據(jù)處理和分析的強(qiáng)大模塊,有時(shí)也可以用來(lái)自動(dòng)化處理Excel

如果你懶得看詳細(xì)的對(duì)比過(guò)程,可以直接看最后的總結(jié)圖,然后拉到文末收藏點(diǎn)贊就算學(xué)會(huì)了

 

一、安裝

7個(gè)模塊均為非標(biāo)準(zhǔn)庫(kù),因此都需要在命令行中 pip 進(jìn)行安裝:

 

  1. pip install xlrd 
  2. pip install xlwt 
  3. pip install xlutils 
  4. pip install xlwings 
  5. pip install XlsxWriter 
  6. pip install openpyxl 
  7. pip install pandas 

二、模塊導(dǎo)入

多數(shù)模塊可以直接通過(guò)名字導(dǎo)入,有些模塊約定俗稱(chēng)會(huì)使用縮寫(xiě):

 

  1. import xlrd 
  2. import xlwt 
  3. import xlwings as xw 
  4. import xlsxwriter 
  5. import openpyxl 
  6. import pandas as pd 

xlutils 模塊是 xlrd 和 xlwt 之間的橋梁,最核心的作用是拷貝一份通過(guò) xlrd 讀取到內(nèi)存中的 .xls 對(duì)象,然后再拷貝對(duì)象上通過(guò) xlwt 修改 .xls 表格的內(nèi)容。xlutils 可以將 xlrd 的 Book 對(duì)象復(fù)制轉(zhuǎn)換為 xlwt 的Workbook 對(duì)象,具體使用時(shí)通常導(dǎo)入的是模塊中的 copy 子模塊:

 

  1. import xlutils.copy 

三、讀取 Excel 文件

3.1 獲取文件

并不是所有7個(gè)模塊都可以讀取 Excel 文件,而即使能讀取Excel文件也要分不同后綴名進(jìn)行討論,具體如下:

  1. xlwt、xlutils、XlsxWriter 不能讀取文件
  2. xlrd 可以讀取 .xls 和 .xlsx 文件
  3. xlwings 可以讀取 .xls 和 .xlsx 文件
  4. openpyxl 可以讀取 .xlsx 文件
  5. pandas 可以讀取 .xls 和 .xlsx 文件

下面使用兩個(gè)大小均為 10MB 的 .xls 和 .xlsx 文件進(jìn)行測(cè)試:

 

  1. xls_path = r'C:\xxx\Desktop\test.xls' 
  2. xlsx_path = r'C:\xxx\Desktop\test.xlsx' 

3.1.1 xlrd 讀取文件

xlrd 可以讀取 .xls 和 .xlsx 文件

 

  1. xls = xlrd.open_workbook(xls_path) 
  2. xlsx = xlrd.open_workbook(xlsx_path) 

3.1.2 xlwings 讀取文件

xlwings 直接對(duì)接的是 apps,也就是 Excel 應(yīng)用程序,然后才是工作簿 books 和工作表 sheets,xlwings 需要安裝有 Excel 應(yīng)用程序的環(huán)境xlwings 可以讀取 .xls 和 .xlsx 文件

 

  1. app = xw.App(visible=True, add_book=False) # 程序可見(jiàn),只打開(kāi)不新建工作薄 
  2. app.display_alerts = False # 警告關(guān)閉 
  3. app.screen_updating = False # 屏幕更新關(guān)閉 
  4. # wb = app.books.open(xls_path) 
  5. wb = app.books.open(xlsx_path) 
  6. wb.save() # 保存文件 
  7. wb.close() # 關(guān)閉文件 
  8. app.quit() # 關(guān)閉程序 

3.1.3 openpyxl 讀取文件

openpyxl 可以讀取 .xlsx 文件

 

  1. wb = openpyxl.load_workbook(xlsx_path) 

如果讀取 .xls 文件會(huì)報(bào)錯(cuò):

 

  1. wb = openpyxl.load_workbook(xls_path) 

openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.

3.1.4 pandas 讀取文件

pandas 可以讀取 .xls 和 .xlsx 文件

 

  1. xls = pd.read_excel(xls_path, sheet_name='Sheet1'
  2. xlsx = pd.read_excel(xlsx_path, sheet_name='Sheet1'

接下來(lái)比較四個(gè)模塊在同一配置電腦下讀取 10MB .xlsx 文件的時(shí)間(運(yùn)行3次求平均值),所用代碼為:

 

  1. import time 
  2. import xxx 
  3.  
  4. time_start = time.time() 
  5. xxx 
  6. time_end = time.time() 
  7. print('time cost: ', time_end-time_start, 's'

最后測(cè)試的結(jié)果是,xlwings 讀取 10MB 文件最快,xlrd 次之,openpyxl 最慢(因電腦而異,結(jié)果僅供參考)

讀入 Excel 文件部分的表格總結(jié)如下:

 

 

 

3.2 獲取工作表

針對(duì)上述4個(gè)可以讀取 Excel 文件的模塊,進(jìn)一步討論其獲取工作表 sheet 的方式

3.2.1 xlrd 獲取工作表

可以通過(guò) sheet 名查找:

 

  1. sheet = xlsx.sheet_by_name("Sheet1"

也可通過(guò)索引查找:

 

  1. sheet = xlsx.sheet_by_index(0) 

3.2.2 xlwings 獲取工作表

xlwings 的工作表分為活動(dòng)工作表以及指定工作簿下的特定工作表:

 

  1. sheet = xw.sheets.active  # 在活動(dòng)工作簿 
  2. sheet = wb.sheets.active  # 在特定工作簿 

3.2.3 openpyxl 獲取工作表

.active 方法默認(rèn)獲取工作簿的第一張工作表

 

  1. sheet = wb.active 

另外也可以通過(guò)工作表名指定獲取工作表:

 

  1. sheet = wb['Sheet1'

3.2.4 pandas 獲取工作表

單獨(dú)獲取工作表完全沒(méi)有 pandas 什么事情,因?yàn)樽x取文件的同時(shí)已經(jīng)且必須指定工作表才能讀?。?/p>

 

  1. xlsx = pd.read_excel(xlsx_path, sheet_name='Sheet1'

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

簡(jiǎn)單總結(jié)創(chuàng)建 Excel 文件的情況:

  1. xlrd、xlutils 不能創(chuàng)建 Excel 文件
  2. xlwt 只能創(chuàng)建 .xls 文件,不能創(chuàng)建 .xlsx 文件
  3. xlwings可以創(chuàng)建 .xls 和 .xlsx 文件
  4. XlsxWriter 可以創(chuàng)建 .xlsx 文件
  5. openpyxl 可以創(chuàng)建 .xls 和 .xlsx 文件
  6. pandas 沒(méi)有創(chuàng)建 Excel 的概念,但可以存儲(chǔ)時(shí)產(chǎn)生 .xls 或 .xlsx 文件

4.1 xlwt 創(chuàng)建文件

xlwt 只能創(chuàng)建 .xls 文件,不能創(chuàng)建 .xlsx 文件

 

  1. xls = xlwt.Workbook(encoding= 'ascii'
  2. # 創(chuàng)建新的sheet表 
  3. worksheet = xls.add_sheet("Sheet1"

4.2 xlwings 創(chuàng)建文件

xlwings可以創(chuàng)建 .xls 和 .xlsx 文件,只需要最后保存時(shí)寫(xiě)清楚后綴即可。使用如下命令:

 

  1. wb = app.books.add() 

無(wú)論是新建還是打開(kāi)都需要保存工作簿、關(guān)閉工作簿、關(guān)閉程序,即:

 

  1. wb.save(path + r'\new_practice.xlsx')  
  2. wb.close()  
  3. app.quit() 

4.3. XlsxWriter 創(chuàng)建文件

XlsxWriter 可以創(chuàng)建 .xlsx 文件:

 

  1. xlsx = xlsxwriter.Workbook()    
  2. # 添加工作表 
  3. sheet = xlsx .add_worksheet('Sheet1') 

4.4 openpyxl 創(chuàng)建文件

openpyxl可以創(chuàng)建 .xls 和 .xlsx 文件,只需要最后保存時(shí)寫(xiě)清楚后綴即可。使用如下命令:

 

  1. wb = Workbook() 
  2. # 新工作簿中指定即創(chuàng)建工作表 
  3. sheet = wb.active 

4.5. pandas 創(chuàng)建文件

pandas 只需要最后轉(zhuǎn)存時(shí)寫(xiě)清楚后綴即可。實(shí)際上比較抽象,pandas 并不需要一開(kāi)始先創(chuàng)建一個(gè) Excel 文件,可以圍繞數(shù)據(jù)框做各式操作后用 .to_excel 命令再用 .xls 或者 .xlsx 做文件后綴。如果一定要產(chǎn)生一個(gè)空白 Excel 文件可以用如下命令:

 

  1. df = pd.DataFrame([]) 
  2. df.to_excel(r'C:\xxx\test1.xlsx'

五、保存文件

簡(jiǎn)單總結(jié)保存 Excel 文件的情況:

  1. xlrd 不能保存 Excel 文件
  2. xlwt 可以保存 .xls 文件
  3. xlutils 可以將 xlrd 對(duì)象復(fù)制為 xlwt 對(duì)象后保存 .xls 文件
  4. xlwings可以保存 .xls 和 .xlsx 文件
  5. XlsxWriter 可以保存 .xlsx 文件
  6. openpyxl 可以保存 .xlsx 文件
  7. pandas 可以保存 .xls 或 .xlsx 文件

5.1 xlwt 保存文件

xlwt 可以保存 .xls 文件

 

  1. # xls = xlwt.Workbook(encoding= 'ascii'
  2. # worksheet = xls.add_sheet("Sheet1"
  3. xls.save("new_table.xls"

5.2 xlutils 保存文件

xlutils 可以將 xlrd 對(duì)象復(fù)制為 xlwt 對(duì)象后保存 .xls 文件

 

  1. # xls_path = r'C:\xxxx\test.xls' 
  2. # xls = xlrd.open_workbook(xls_path) 
  3. xls_xlutils = xlutils.copy.copy(xls) 
  4. xls_xlutils.save('new_text.xls'

5.3 xlwings 保存文件

xlwings可以保存 .xls 和 .xlsx 文件

 

  1. # wb = app.books.open(xls_path) 
  2. wb = app.books.open(xlsx_path) 
  3. wb.save() # 保存文件 
  4. wb.close() # 關(guān)閉文件 
  5. app.quit() # 關(guān)閉程序 

5.4 XlsxWriter 保存文件

XlsxWriter 可以保存 .xlsx 文件,.close 命令執(zhí)行后文件關(guān)閉的同時(shí)保存:

 

  1. # xlsx = xlsxwriter.Workbook() 
  2. # sheet = xlsx .add_worksheet('Sheet1'
  3. xlsx.close() 

5.5 openoyxl 保存文件

openpyxl 可以保存 .xlsx 文件

 

  1. # wb = openpyxl.load_workbook(xlsx_path) 
  2. # wb = Workbook() 
  3. # sheet = wb.active 
  4. wb.save('new_test.xlsx'

6. pandas 保存文件

pandas 可以保存 .xls 或 .xlsx 文件

 

  1. df1 = pd.DataFrame([1, 2, 3]) 
  2. df2 = pd.DataFrame([1, 2, 4]) 
  3. df1.to_excel(r'C:\xxxx\test1.xls'
  4. df2.to_excel(r'C:\xxxx\test2.xlsx'

六、獲取單元格的值

獲取單元格的值基本前提是能夠讀取文件,因此基本圍繞 xlrd、xlwings、openpyxl、pandas 介紹。xlutils 由于能夠復(fù)制一份 .xls 因此也可以使用和 xlrd 完全一樣的讀取單元格方法。

6.1. xlrd/xlutils 獲取單元格

xlutils 因?yàn)槭侵苯涌截愐环?xlrd 適用的對(duì)象,讀取單元格使用的方法和 xlrd 完全一樣。xlwt 沒(méi)有讀取單元格的能力

 

  1. # xls = xlrd.open_workbook(xls_path) 
  2. # sheet = xlsx.sheet_by_name("Sheet1"
  3. value = sheet.cell_value(4, 6) # 第5行第7列的單元格 
  4. print(value) 
  5. rows = table.row_values(4) 
  6. cols = table.col_values(6) 
  7. for cell in rows
  8.     print(cell) 

6.2. xlwings 獲取單元格

 

  1. # app = xw.App(visible=True, add_book=False)  
  2. # app.display_alerts = False  
  3. # app.screen_updating = False  
  4. # wb = app.books.open(xls_path) 
  5. # sheet = wb.sheets.active 
  6.  
  7. # 獲取單個(gè)單元格的值 
  8. A1 = sheet.range('A1').value 
  9. print(A1) 
  10. # 獲取橫向或縱向多個(gè)單元格的值,返回列表 
  11. A1_A3 = sheet.range('A1:A3').value 
  12. print(A1_A3) 
  13. # 獲取給定范圍內(nèi)多個(gè)單元格的值,返回嵌套列表,按行為列表 
  14. A1_C4 = sheet.range('A1:C4').value 
  15. print(A1_C4) 
  16. # 獲取單個(gè)單元格的值 
  17. A1 = sheet.range('A1').value 
  18. print(A1) 
  19. # 獲取橫向或縱向多個(gè)單元格的值,返回列表 
  20. A1_A3 = sheet.range('A1:A3').value 
  21. print(A1_A3) 
  22. # 獲取給定范圍內(nèi)多個(gè)單元格的值,返回嵌套列表,按行為列表 
  23. A1_C4 = sheet.range('A1:C4').value 
  24. print(A1_C4) 

6.3 openpyxl 獲取單元格

 

  1. # wb = openpyxl.load_workbook(xlsx_path) 
  2. # wb = Workbook() 
  3. # sheet = wb.active 
  4.  
  5. # 一、指定坐標(biāo)范圍的值 
  6. cells = sheet['A1:B5'
  7. # 二、指定列的值 
  8. cells = sheet['A'
  9. cells = sheet['A:C'
  10. # 三、指定行的值 
  11. cells = sheet[5] 
  12. cells = sheet[5:7] 
  13. # 獲取單元格的值 
  14. for cell in cells: 
  15.     print(cell.value) 

6.4 pandas 獲取單元格的值

pandas 讀取 Excel 文件后即將它轉(zhuǎn)換為數(shù)據(jù)框?qū)ο?,解析?nèi)容的方法基本是 pandas 體系中的知識(shí)點(diǎn),如 .iloc() .loc() .ix() 等:

 

  1. print(df1.iloc[0:1, [1]]) 
  2. print(df1.loc['b']) 
  3. print(df2.ix['a''a']) # 有些版本取消了ix,可以用iat 

七、寫(xiě)入數(shù)據(jù)

還是先簡(jiǎn)單總結(jié)對(duì) Excel 文件寫(xiě)入數(shù)據(jù)的情況:

  1. xlrd 不能寫(xiě)入數(shù)據(jù)
  2. xlwt 可以寫(xiě)入數(shù)據(jù)
  3. xlutils 可以借用 xlwt 方法寫(xiě)入數(shù)據(jù)
  4. xlwings可以寫(xiě)入數(shù)據(jù)
  5. XlsxWriter 可以寫(xiě)入數(shù)據(jù)
  6. openpyxl 可以寫(xiě)入數(shù)據(jù)
  7. pandas 將 Excel 文件讀取為數(shù)據(jù)框后,是抽象出數(shù)據(jù)框?qū)用孢M(jìn)行操作,沒(méi)有了對(duì) Excel 進(jìn)行單元格寫(xiě)入和修改的概念

7.1. xlwt/xlutils 寫(xiě)入數(shù)據(jù)

 

  1. # xls = xlrd.open_workbook(xls_path) 
  2. # xls_xlutils = xlutils.copy.copy(xls) 
  3. # sheet = xls_xlutils.sheet_by_name("Sheet1"
  4. # value = sheet.cell_value(4, 6) 
  5. # print(value) 
  6. sheet.write(4, 6, "新內(nèi)容"

7.2 xlwings 寫(xiě)入數(shù)據(jù)

 

  1. # app = xw.App(visible=True, add_book=False)  
  2. # app.display_alerts = False  
  3. # app.screen_updating = False  
  4. # wb = app.books.open(xls_path) 
  5. # sheet = wb.sheets.active 
  6.  
  7. # 寫(xiě)入 1 個(gè)單元格 
  8. sheet.range('A2').value = '大明' 
  9. # 一行或一列寫(xiě)入多個(gè)單元格 
  10. # 橫向?qū)懭階1:C1 
  11. sheet.range('A1').value = [1,2,3] 
  12. # 縱向?qū)懭階1:A3 
  13. sheet.range('A1').options(transpose=True).value = [1,2,3] 
  14. # 寫(xiě)入范圍內(nèi)多個(gè)單元格 
  15. sheet.range('A1').options(expand='table').value = [[1,2,3], [4,5,6]] 

7.3 XlsxWriter 寫(xiě)入數(shù)據(jù)

代碼中的 new_format 是之前預(yù)設(shè)好的樣式,下文會(huì)進(jìn)行介紹

 

  1. # xlsx = xlsxwriter.Workbook() 
  2. # sheet = xlsx .add_worksheet('Sheet1'
  3.  
  4. # 一、寫(xiě)入單個(gè)單元格 
  5. sheet.write(row, col, data, new_format) 
  6. # A1:從A1單元格開(kāi)始插入數(shù)據(jù),按行插入 
  7. sheet.write_row('A1', data, new_format) 
  8. # A1:從A1單元格開(kāi)始插入數(shù)據(jù),按列插入 
  9. sheet.write_column('A1', data, new_format) 

7.4. openpyxl 寫(xiě)入數(shù)據(jù)

 

  1. # wb = openpyxl.load_workbook(xlsx_path) 
  2. # wb = Workbook() 
  3. # sheet = wb.active 
  4.  
  5. # 一、寫(xiě)入單元格 
  6. cell = sheet['A1'
  7. cell.value = '業(yè)務(wù)需求' 
  8. # 二、寫(xiě)入一行或多行數(shù)據(jù) 
  9. data1 = [1, 2, 3] 
  10. sheet.append(data1) 
  11. data2 = [[1, 2, 3], [4, 5, 6]] 
  12. sheet.append(data2) 

八、樣式調(diào)整

依舊簡(jiǎn)單總結(jié)對(duì) Excel 文件樣式調(diào)整的情況:

  1. xlrd、xlutils 不能調(diào)整樣式 (也可以說(shuō) xlutils 可以,只不過(guò)是借用了 xlwt 的方法)
  2. xlwt 可以調(diào)整樣式
  3. xlwings可以調(diào)整樣式
  4. XlsxWriter 可以調(diào)整樣式
  5. openpyxl 可以調(diào)整樣式
  6. pandas 不能調(diào)整樣式

8.1 xlwt 調(diào)整樣式

xlwt 支持調(diào)整字體、邊框、顏色等樣式

 

  1. # 字體部分 
  2. # 初始化樣式 
  3. style1 = xlwt.XFStyle() 
  4. # 為樣式創(chuàng)建字體 
  5. font = xlwt.Font() 
  6. font.name = 'Times New Roman'   #字體 
  7. font.bold = True                #加粗 
  8. font.underline = True           #下劃線(xiàn) 
  9. font.italic = True              #斜體 
  10. # 設(shè)置樣式 
  11. style1.font = font 
  12. # 使用樣式 
  13. sheet.write(4, 6, "新內(nèi)容1", style1) 
  14.  
  15. # 邊框部分 
  16. borders = xlwt.Borders() 
  17. # 設(shè)置線(xiàn)型 
  18. borders.left = xlwt.Borders.DASHED 
  19. borders.right = xlwt.Borders.DASHED 
  20. borders.top = xlwt.Borders.DASHED 
  21. borders.bottom = xlwt.Borders.DASHED 
  22. # 設(shè)置樣色 
  23. borders.left_colour = 0x40 
  24. borders.right_colour = 0x40 
  25. borders.top_colour = 0x40 
  26. borders.bottom_colour = 0x40 
  27. #  
  28. style2 = xlwt.XFStyle() 
  29. style2.borders = borders 
  30. # 使用樣式 
  31. sheet.write(5, 8, "新內(nèi)容2", style2) 

8.2 xlwings 調(diào)整樣式

簡(jiǎn)單介紹 xlwings 對(duì)顏色的調(diào)整:

 

  1. # 獲取顏色 
  2. print(sheet.range('C1').color) 
  3. # 設(shè)置顏色 
  4. sheet.range('C1').color = (255, 0, 120) 
  5. # 清除顏色 
  6. sheet.range('C1').color = None 

8.3 XlsxWriter 調(diào)整樣式

XlsxWriter 包含大量功能,可以創(chuàng)建工作表后對(duì)工作表進(jìn)行高定自定義的樣式修改:

 

  1. new_format = xlsx.add_format({ 
  2.         'bold':  True,  # 字體加粗 
  3.         'border': 1,  # 單元格邊框?qū)挾?nbsp;
  4.         'align''left',  # 水平對(duì)齊方式 
  5.         'valign''vcenter',  # 垂直對(duì)齊方式 
  6.         'fg_color''#F4B084',  # 單元格背景顏色 
  7.         'text_wrap'True  # 是否自動(dòng)換行 
  8.     }) 
  9.  
  10. sheet.write(row, col, data, new_format) 

8.4 openpyxl 調(diào)整樣式

openpyxl 樣式主要包括字體、邊框、段落對(duì)齊樣式等

 

  1. # 字體樣式 
  2. from openpyxl.styles import Font  
  3. cell = sheet['A1']  
  4. font = Font(name='Arial'size=12, bold=True, italic=True, color='FF0000')  
  5. cell.font = font 
  6.  
  7. # 段落對(duì)齊 
  8. from openpyxl.styles import Alignment  
  9. cell = sheet['B2']  
  10. alignment = Alignment(horizontal='center', vertical='center',                     text_rotation=45, wrap_text=True)  
  11. cell.alignment = alignment  
  12.  
  13. # 邊框樣式 
  14. from openpyxl.styles import Side, Border  
  15. cell = sheet['B2']  
  16. side1 = Side(style='thin', color='FF0000')  
  17. side2 = Side(style='dashed')  
  18. border = Border(left=side1, right=side1, top=side2, bottom=side2)  
  19. cell.border = border 

九、插入圖片

簡(jiǎn)單總結(jié)對(duì) Excel 文件插入圖片的情況:

  1. xlrd、xlutils 不能調(diào)整樣式 (也可以說(shuō) xlutils 可以,只不過(guò)是借用了 xlwt 的方法)
  2. xlwt 可以插入 .bmp 圖片
  3. xlwings可以插入 圖片
  4. XlsxWriter 可以插入圖片
  5. openpyxl 可以插入圖片
  6. pandas 不能插入圖片

9.1 xlwt 插入圖片

xlwt 插入圖片要求圖片格式必須是 .bmp 格式才能插入成功

 

  1. sheet.insert_bitmap("test.bmp", 2, 3, 2, 2, 0.5, 0.5) 

insert_bitmap(img, x, y, x1, y1, scale_x, scale_y)img 表示要插入的圖像地址,x 表示行,y 表示列x1 y1 表示相對(duì)原來(lái)位置向下向右偏移的像素scale_x scale_y表示相對(duì)原圖寬高的比例,圖片可放大縮小

9.2 xlwings 插入圖片

下面是用xlwings 插入圖片的代碼,可以指定位置

 

  1. sheet.pictures.add(r'C:\\xxx.jpg'
  2. # 也可以給定位置插入 
  3. sheet.pictures.add(r'C:\\xxx.jpg'left=sheet.range('A2').lefttop=sheet.range('A2').top, width=100, height=100) 

9.3 XlsxWriter 插入圖片

第一個(gè)參數(shù)是插入的起始單元格,第二個(gè)參數(shù)是圖片文件的絕對(duì)路徑

 

  1. sheet.insert_image('A1', r'C:\\xxx.jpg'

9.4 openpyxl 插入圖片

openpyxl也可以給Excel中插入指定圖片并修改大小

 

  1. from openpyxl.drawing.image import Image 
  2. img = Image('test.jpg'
  3. newsize = (180, 360)  
  4. img.width, img.height = newsize # 設(shè)置圖片的寬和高 
  5. sheet.add_image(img, 'A2') # 往A2單元格插入圖片 

小結(jié)

以上就是根據(jù)不同 Python 模塊,對(duì)常見(jiàn)的 Excel 操作進(jìn)行對(duì)比的全部?jī)?nèi)容,最終結(jié)果匯總?cè)缦卤硭?/p>

 

請(qǐng)注意,本文目的并不是要評(píng)出一個(gè)最好的庫(kù),僅是從不同角度對(duì)不同庫(kù)進(jìn)行對(duì)比,希望能夠讓大家了解各個(gè)庫(kù)所擅長(zhǎng)的工作。比如pandas雖然處理方便,但是不能添加圖片修改樣式,openpyxl雖然各種操作都支持,但是速度又相對(duì)慢一點(diǎn)等。

只有充分了解不同工具的特點(diǎn),才能夠在不同的場(chǎng)景下靈活運(yùn)用不同的方法來(lái)高效解決問(wèn)題!

責(zé)任編輯:華軒 來(lái)源: 早起Python
相關(guān)推薦

2017-12-15 10:00:46

前端框架Vue.js

2021-11-03 16:10:16

RedisJava內(nèi)存

2013-05-02 13:52:07

2019-04-28 11:06:01

Hbase架構(gòu)程序員

2020-02-27 09:50:19

代碼開(kāi)發(fā)工具

2019-07-26 11:27:25

MySQLSQL數(shù)據(jù)庫(kù)

2018-10-25 09:37:02

Docker入門(mén)容器

2018-11-05 08:10:30

Netty架構(gòu)模型

2017-10-09 10:42:28

開(kāi)源HTMLCSS

2021-02-26 10:16:55

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2020-11-20 06:23:53

MacBook

2021-05-27 05:30:23

數(shù)據(jù)分析工具數(shù)據(jù)可視化

2018-07-16 15:05:43

Redis內(nèi)存數(shù)據(jù)庫(kù)

2019-12-19 14:23:23

Mac Pro蘋(píng)果修復(fù)

2021-09-30 07:25:32

數(shù)據(jù)分析數(shù)據(jù)分析師工具

2019-05-29 10:04:38

CAP理論 AP

2017-10-17 12:43:17

前端CSS布局

2020-03-05 15:12:51

數(shù)據(jù)分析人工智能運(yùn)營(yíng)

2015-05-11 15:06:00

軟件工程師寫(xiě)代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)