Python與Excel互動——Xlwings
Python與Excel互動——Xlwings
Xlwings是我認為的Python最強大的處理Excel的庫,主要原因如下:
1 Windows,Mac都能用 (Excel,WPS也都能用)
2 功能齊全,支援Excel的新建、開啟、修改、儲存(pandas和xlsxwriter去不能全做到)
3 語法簡單(用過一次後我就記住了)
4 可以呼叫VBA,有豐富的API
Talk is cheap, show you the code.
先說基本操作:
引入庫
import xlwings as xw
開啟Excel程式,預設設定:程式可見,只打開不新建工作薄
app = xw.App(visible=True,add_book=False)
#新建工作簿 (如果不接下一條程式碼的話,Excel只會一閃而過,賣個萌就走了)
wb = app.books.add()
開啟已有工作簿(支援絕對路徑和相對路徑)
wb = app.books.open('example.xlsx')
#練習的時候建議直接用下面這條
#wb = xw.Book('example.xlsx')
#這樣的話就不會頻繁開啟新的Excel
儲存工作簿
wb.save('example.xlsx')
退出工作簿(可省略)
wb.close()
退出Excel
app.quit()
引用Excel工作表,單元格
引用工作表
sht = wb.sheets[0]
#sht = wb.sheets[第一個sheet名]
引用單元格
rng = sht.range('a1')
#rng = sht['a1']
#rng = sht[0,0] 第一行的第一列即a1,相當於pandas的切片
引用區域
rng = sht.range('a1:a5')
#rng = sht['a1:a5']
#rng = sht[:5,0]
重頭戲:寫入資料
(xlwings多個單元格的寫入大多是以表格形式)
選擇起始單元格A1,寫入字串‘Hello’
sht.range('a1').value = 'Hello'
預設按行插入: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]
但是你會發現xlwings還是會按行處理的,上面一行等同於
*sht.range('a2').value = [5,6,7,8]
正確語法:
sht.range('a2').options(transpose=True).value = [5,6,7,8]
既然預設的是按行寫入,我們就把它倒過來嘛(transpose),單詞要打對,如果你打錯單詞,它不會報錯,而會按預設的行來寫入(別問我怎麼知道的)
我們輸入資訊的時候往往不只是寫入一行或一列,
多行輸入就要用二維列表了:
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]
說完了寫入就該講讀取了,記住了寫入,讀取就簡單了
讀取A1:D4(直接填入單元格範圍就行了)
print(sht.range('a1:d4').value)
返回的值是列表形式,多行多列為二維列表,但有一點要注意,返回的數值預設是浮點數
a = sht.range('a1:d1').value
print(a)
for i in a:
print(i)
print(type(i))
讀取excel的第一列怎麼做?
*a = sht.range('a:a').value
print(len(a))
你將會得到一個1048576個元素的列表,也就是空值也包含進去了,所以這種方法不行
思路:先計算單元格的行數(前提是連續的單元格)
rng = sht.range('a1').expand('table')
nrows = rng.rows.count
接著就可以按準確範圍讀取了
a = sht.range(f'a1:a{nrows}').value
同理選取一行的資料也一樣
ncols = rng.columns.count
#用切片
fst_col = sht[0,:ncols].value
好了基本操作就介紹到這裡了,感謝閱讀!!!