Python模塊之xlwings


一、什么是xlwings模塊

1、xlwings是Python操作excel讀寫操作的第三方庫

2、特色: xlwings支持對xls和xlsx文件的讀寫,相對於其他第三方庫xlrd,xlwd,openpyxl等效率高,可擴展性強。可以和matplotlib以及pandas無縫連接,也可以調用Excel文件中VBA寫好的程序,和讓VBA調用用Python寫的程序。

 

二、如何使用

1、安裝:pip install xlwings

2、應用模式: 對象》工作簿》工作表》表格內容

可以簡單的理解,建立一個對象,就是打開一個excel程序,一個excel應用可以管理多個工作薄,一個工作薄中可以由多張表,一個表中有多個單元格

3、基本操作

3.1創建工作簿表

#創建操作對象
app=xw.App(visible=True,add_book=False)
#visible  是否打開文件,在Excel軟件中顯示
#add_book 是否創建新的工作簿,即Excel表(這個表是默認的,未命名狀態)
#創建一個工作簿,即Excel表
wb=app.books.add() #創建一個sheet工作表 sht=wb.sheets['sheet1'] #給單元格創建一個值 sht.range('A1').value='我給了單元格A1一個值2' #保存Excel,保存創建的工作簿,如果文件存在,則會覆蓋原文件 #給連續的行寫入值,從A2開始按行寫 sht.range('A2').value=[1,2,3,4,56,7] #sht.range('A2:F2').value=[1,2,3,4,56,7] #寫入行,需要轉置 sht.range('B2').options(transpose=True).value=[22,33,44,55] #插入行列 sht.range('A6').value=[[1,2],[3,4],[5,6]] #默認起點A6,插入三行兩列 wb.save(r'file/xlwings_excel2.xlsx') #如果資源不關閉,任然還是可以對工作簿進行操作 #后寫入的內容需要重新保存 # sht.range('A6').value='我給了單元格A1一個值5' #wb.save() #后面的保存不需要傳入文件 #關閉Excel程序, # 如果不關閉資源,重復執行的話,則會生成一個默認的工作簿 wb.close() app.quit()

 3.2讀取工作簿

#創建操作對象
app=xw.App(visible=True,add_book=False)
#打開已有的工作簿
wb=app.books.open(r'file/xlwings_excel2.xlsx')

#打開sheet表,表不存在保存
sht=wb.sheets['sheet1']
#打印單元的值
a1=sht.range('A1').value
print(a1)
#讀一行的值,A2:F2
a2=sht.range('A2:F2').value
print(a2)  #列表的形式顯示
#讀一列
b2=sht.range('b2:b20').value
print(b2)   #列表顯示,如果沒有值,顯示none

#讀一個數組,如果對表有寫的操作,需要保存wb.save()
a6_b6=sht.range('a6:b8').value
print(a6_b6) #一個二維數組


#關閉資源 wb.close() app.quit()

 3.3一些數據讀取的操作

import xlwings as xw
import time

#xlwings對表操作的性能測試

#建立一個操作對象
app=xw.App(visible=False,add_book=False)

start_open_time=time.time()

#打開一個工作薄
wb=app.books.open(r'file/test_企業微信群名單.xlsx')
sht=wb.sheets[3]
t1=time.time()
print(f'打開工作薄所需要的時間{t1-start_open_time}')  #1.82s

'''
結論:
打開工作薄所需要的時間與工作薄的數據大小有關,和工作表的大小無關
Member_20210901202429.xlsx  36w數據-18秒
test_企業微信群名單.xlsx   多個工作表:5萬數據,1.8s
'''

#讀取工作表的數據
#按行加載讀取
#得到表中有值的最大行和列
table_info = sht.used_range
nrows = table_info.last_cell.row
ncolumns = table_info.last_cell.column
print(f'表的最大行==》{nrows},最大列==》{ncolumns}')
b_values=[]
#按行取值,循環加入列表中
# for i in range(2,nrows+1):
#     v=sht.range(f'B{i}').value
#     if not v: break  # 值是空的,結束循環
#     b_values.append(v)

#一次性加載某一列值
b_values=sht.range(f'B2:B{nrows+1}').value
print(len(b_values))   #54297

t2=time.time()
print(f'按行取值所需要的時間{t2-t1}')

'''
結論:
按行取值54297行,需要16.9s
一次性加載54297行,需要0.18s

在操作excel中,不要頻繁的調用excel的range對象取值
盡量一次性的把數據讀取到Python的內存中
'''

#資源關閉
wb.close()
app.quit()

 注意:

xlwings可以在Excel文件打開的狀態下操作,在數據讀取或者寫入的時候,盡量一次性的讀和寫,不要頻繁的打開文件,不要頻率的調用range對象操作。

純數字類型的單元格會被讀成浮點型格式數據,如果你想要的是字符串,你需要在Excel中,分列轉成文本類型

當讀取一行或者一列時候,得到的是一個一維數組,多行多列的時候是二維數組。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM