Python與Excel交互——Xlwings


先說基本操作:

引入庫

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:D4分別寫入1,2,3,4

sht.range('a1').value = [1,2,3,4] 

等同於

sht.range('a1:d4').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)) 
 
image

讀取excel的第一列怎么做?

*a = sht.range('a:a').value print(len(a)) 
 
image

你將會得到一個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 

好了基本操作就介紹到這里了,下次搞個實戰,把xlwings好好用起來



作者:Python從放棄到真香
鏈接:https://www.jianshu.com/p/e92bad922197
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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