1. 程式人生 > 其它 >Python與Excel互動——Xlwings

Python與Excel互動——Xlwings

技術標籤:Pythonpython

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

好了基本操作就介紹到這裡了,感謝閱讀!!!