一、背景
有2種模塊可以對Execl文件,一種是xlwt 方式,需要安裝三個庫文件 xlrd(讀Excel)xlwt(寫Excel)xlutils(修改Excel),也是網上介紹文章最多的一種方法,一種是xlwings方式,只要安裝一個庫文件。第一種方式將讀寫修改分模塊,支持Excel表格樣式設計,第二種方式不支持表格樣式設計,支持對Excel進行讀寫操作。由於老猿目前只要用Execl進行讀操作,同時覺得裝一個庫文件簡單,因此選擇的是xlwings方式。
二、軟件安裝
才開始使用pip install xlwings安裝,結果超時了,果斷改成了使用國內的鏡像來安裝,很快完成,命令為:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlwings
三、庫文件相關文檔
xlwings庫官方地址:https://docs.xlwings.org/en/stable/
四、xlwings庫主要操作方法
1、設置Excel操作模式
1)語法:App(visible=False, add_book=False)
2)語法釋義:表示處理過程是否可視,也就是處理Excel的過程會不會顯示出來,即是否出現Excel的界面,add_book表示是否打開新的Excel程序,也就是是不是打開一個新的excel窗口,如果為True,且visible為True,則立即打開一個空白的Excel。。
2、打開文件
1)方法1:app.books.open(文件名),其中的app為設置Excel操作模式中App方法返回的結果
2)方法2:Book(文件名)
這兩種方法打開文件返回的結果類型是相同的,類型為xlwings.main.Book,二者的差別經驗證測試,發現如果是在對應文件已經打開的情況下,使用app.books.open再去打開可以重復打開,但Book不會重復打開。且如果是一個程序內多次調用app.books.open打開同一個文件也不會重復打開。
測試代碼:
>>> import xlwings as Excel
>>> from time import sleep
>>> def openexcel(visible=False, add_book=False)
app = Excel.App(visible, add_book)
print("app created!")
f1=app.books.open(r"c:\temp\csdn積分數據.xls")
print("f1 opened!")
sleep(2)
f2=app.books.open(r"c:\temp\csdn積分數據.xls")
print("f2 opened!")
sleep(2)
f3 = Excel.Book(r"c:\temp\csdn積分數據 - 副本.xls")
print("f3 opened!")
sleep(2)
f4 = Excel.Book(r"c:\temp\csdn積分數據 - 副本.xls")
print("f4 opened!")
>>> openexcel(True,True)
app created!
f1 opened!
f2 opened!
f3 opened!
f4 opened!
>>> openexcel(True,True)
app created!
f1 opened!
f2 opened!
f3 opened!
f4 opened!
3.文件打開后的訪問
假設文件打開后的返回結果為f,則打開文件后:
1)訪問Excel的sheet
sheet = f.sheets[index]
或者
sheet = f.sheets[‘sheet名’]
注意:index是sheet頁的序號,從0開始。
2)訪問sheet的記錄數
sheet.used_range.last_cell.row
3)訪問sheet的列數
sheet.used_range.last_cell.column
4)獲取i行j列的數據
value = sheet.range(i,j).value
5)獲取i行j列開始到j+10列的數據
value = sheet.range((i,j),(i,j+10)).value
6)讀取第i行整行
value = sheet.range(‘Ai’).expand(‘right’).value
或
value = sheet.range(i,1).expand(‘right’).value
6)讀取第k列整列
value = sheet.range(‘k1’).expand(‘down’).value
或
alue = sheet.range(1,k).expand(‘down’).value
7)讀取整個sheet的數據
data = sheet.range(‘A1’).expand().value
4、sheet內容寫入:
直接對sheet數據賦值,將讀取語句的方式改成賦值就可以了,如果寫入位置原來有數據,將被寫入數據覆蓋。
1)i行j列寫入
sheet.range(i,j).value = value
2)寫入i行j列開始到j+10列的數據
sheet.range((i,j),(i,j+10)).value = values
其中values為一個有11個元素的列表。
3)第i行寫入整行
sheet.range(i,1).expand(‘right’).value = values
4)第k列寫入整列
sheet.range(1,k).options(transpose=True).value = values
5、文件保存
f.save(文件名)
如果沒有文件名參數保存到打開的Excel文件中,如果給定文件名參數則保存到該指定文件名對應文件,該文件可以是已經打開的文件也可以是另一文件。
6、文件訪問后關閉
f.close()
7、終結應用
app.quit()
五、Excel文件讀取案例
>>> def readExcel(filename,sheetname):
excelApp = excel.App(False,False)
excelFile = excelApp.books.open(filename)
sheet = excelFile.sheets[sheetname]
rowCount = sheet.used_range.last_cell.row
colCount = sheet.used_range.last_cell.column
for line in range(1,rowCount+1):yield sheet.range(line,1).expand('right').value
excelFile.close()
excelApp.quit()
excelApp.kill() #有時quit退出不成功可以使用kill
>>> for line in readExcel(r"c:\temp\csdn積分數據.xls",0):print(line)

博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目錄:https://blog.csdn.net/LaoYuanPython/article/details/98245036