python操做Excel的模塊,網上提到的模塊大體有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他們提供的功能概括起來有兩種:1、用python讀寫Excel文件,實際上就是讀寫有格式的文本文件,操做excel文件和操做text、csv文件沒有區別,Excel文件只是用來儲存數據。2、除了操做數據,還能夠調整Excel文件的表格寬度、字體顏色等。另外須要提到的是用COM調用Excel的API操做Excel文檔也是可行的,至關麻煩基本和VBA沒有區別。python
xlwings的特點
- xlwings可以很是方便的讀寫Excel文件中的數據,而且可以進行單元格格式的修改
- 能夠和matplotlib以及pandas無縫鏈接
- 能夠調用Excel文件中VBA寫好的程序,也可讓VBA調用用Python寫的程序。
- 開源免費,一直在更新
基本操做
- 打開已保存的Excel文檔
# 導入xlwings模塊,打開Excel程序,默認設置:程序可見,只打開不新建工做薄,屏幕更新關閉
import xlwings as xw
app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
# 文件位置:filepath,打開test文檔,而後保存,關閉,結束程序
filepath=r'g:\Python Scripts\test.xlsx'
wb=app.books.open(filepath)
wb.save()
wb.close()
app.quit()
- 新建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()
- 在單元格輸入值
新建test.xlsx,在sheet1的第一個單元格輸入 「人生」 ,而後保存關閉,退出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的第二個單元格輸入「苦短」,而後保存關閉,退出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()
掌握以上代碼,已經徹底能夠把Excel看成一個txt文本進行數據儲存了,也能夠讀取Excel文件的數據,進行計算後,並將結果保存在Excel中。
引用工做簿、工做表和單元格
- 引用工做簿,注意工做簿應該首先被打開
wb.=xw.books['工做簿的名字‘]
- 引用活動工做簿
wb=xw.books.active
- 引用工做簿中的sheet
sht=xw.books['工做簿的名字‘].sheets['sheet的名字']
# 或者
wb=xw.books['工做簿的名字']
sht=wb.sheets[sheet的名字]
- 引用活動sheet
sht=xw.sheets.active
- 引用A1單元格
rng=xw.books['工做簿的名字‘].sheets['sheet的名字']
# 或者
sht=xw.books['工做簿的名字‘].sheets['sheet的名字']
rng=sht.range('A1')
- 引用活動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))數組
儲存數據
- 儲存單個值
# 注意".value「
sht.range('A1').value=1
- 儲存列表
# 將列表[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表格,即二維數組,儲存在A1:B2中,如第一行1,2,第二行3,4
sht.range('A1').options(expand='table')=[[1,2],[3,4]]
讀取數據
- 讀取單個值
# 將A1的值,讀取到a變量中
a=sht.range('A1').value
- 將值讀取到列表中
#將A1到A2的值,讀取到a列表中
a=sht.range('A1:A2').value
# 將第一行和第二行的數據按二維數組的方式讀取
a=sht.range('A1:B2').value
做者:LuckyFrog
連接:https://www.jianshu.com/p/e21894fc5501
來源:簡書app