Python學習隨筆:使用xlwings讀取和操作Execl文件


一、背景
有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


免責聲明!

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



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