1. 程式人生 > 其它 >處理Excel的Python演算法_2_:批量處理Excel檔案的模組——xlwings

處理Excel的Python演算法_2_:批量處理Excel檔案的模組——xlwings

技術標籤:python程式設計與資料處理pythonexcelxlwings

索引

xlwings官方文件

在這裡插入圖片描述
官方網站:https://www.xlwings.org/pro

Quickstart

1、指令碼編寫:通過Python與Excel自動化/互動

建立excel工作簿例項

import xlwings as
xw wb = xw.Book() # 建立一個新的excel檔案 wb = xw.Book('FileName.xlsx') # 連線當前目錄下的excel檔案 wb = xw.Book(r'C:\path\to\file.xlsx') # 連線到路徑下的excel檔案

同一檔案多個例項

如果在兩個Excel例項中打開了同一個檔案,則需要完全限定它幷包含app例項。你可以通過xw.apps.keys()找到你的excel示例:

xw.apps[10559].books['FileName.xlsx']

建立sheet例項

sht = wb.sheets['Sheet1']

讀寫sheet文件

# 讀寫單個單元格:
sht.range('A1').value = 'Foo 1'
sht.range('A1').value
# 有許多便利功能,例如拓展讀寫單元格範圍:
sht.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]
sht.range('A1').expand().value
---------------------------
Foo1  Foo2  Foo3
10.0  20.0  30.0
# 功能強大的轉換器可處理大多數感興趣的資料型別,包括雙向的Numpy陣列和Pandas DataFrame:
import
pandas as pd df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b']) sht.range('A1').value = df sht.range('A1').options(pd.DataFrame, expand='table').value --------------------------- a b 0.0 1.0 2.0 1.0 3.0 4.0 # Matplotlib圖形可以在Excel中顯示為圖片: import matplotlib.pyplot as plt fig = plt.figure() plt.plot([1, 2, 3, 4, 5]) [<matplotlib.lines.Line2D at 0x1071706a0>] sht.pictures.add(fig, name='MyPlot', update=True) <Picture 'MyPlot' in <Sheet [Workbook4]Sheet1>>

2、巨集:從Excel呼叫Python

您可以通過單擊Run載入項中的按鈕(v0.16中的新增功能)來呼叫Python函式,也可以通過VBA使用該RunPython函式來呼叫Python函式:

該Run按鈕需要一個main在Python模組中呼叫的函式,該函式的名稱與您的工作簿相同。這種方法的優點在於,您不需要將工作簿啟用巨集,可以將其另存為xlsx。

如果要呼叫任何Python函式,無論它位於哪個模組中或具有什麼名稱,請使用RunPython:

Sub HelloWorld()
    RunPython "import hello; hello.world()"
End Sub

預設情況下,RunPython期望hello.py與Excel檔案位於同一目錄中,但是您可以通過config進行更改。通過使用xw.Book.caller以下內容來參考呼叫Excel的工作簿:

# hello.py
import numpy as np
import xlwings as xw

def world():
    wb = xw.Book.caller()
    wb.sheets[0].range('A1').value = 'Hello World!'

要執行此程式,您需要安裝xlwings載入項。進行所有設定的最簡單方法是從Windows上的命令提示符或Mac上的終端使用xlwings命令列客戶端。xlwings quickstart myproject

3. UDF:使用者定義的功能(僅Windows)

用Python編寫UDF很容易:

import xlwings as xw

@xw.func
def hello(name):
    return 'Hello {0}'.format(name)

轉換器也可以與UDF一起使用。再次以Pandas DataFrame為例:

import xlwings as xw
import pandas as pd

@xw.func
@xw.arg('x', pd.DataFrame)
def correl2(x):
    # x arrives as DataFrame
    return x.corr()

通過單擊xlwings載入項的匯入按鈕將該函式匯入Excel:有關更多詳細資訊,請參見使用者定義函式(UDF)。

簡單示例

import xlwings as xw
 
# 建立工作簿
app = xw.App(visible = True, add_book = False) # 建立excel例項,啟動視窗,暫不不建立工作簿
workbook = app.books.add() # 建立工作簿

# 儲存工作簿
workbook.save('d:\\example.xlsx')
workbook.close()  # 關閉工作簿
app.quit()  # 退出Excel程式

# 開啟工作簿
import xlwings as xw
app = xw.App(visible = True, add_book = False)
workbook = app.books.open(r'd:\example.xlsx')  # 開啟D盤根資料夾下名
# 需要注意的是,指定的工作簿必須真實存在,並且不能處於已開啟的狀態。

# 操控工作表和單元格
import xlwings as xw
app = xw.App(visible = False)
workbook = app.books.add()
worksheet = workbook.sheets.add('產品統計表')
worksheet.range('A1').value = '編號'
workbook.save(r'd:\北京.xlsx')
workbook.close()
app.quit()