Python殺死Excel?我只會用Python來增強Excel!

Python殺死Excel?我只會用Python來增強Excel!

Excel既是一種祝福,也是一種詛咒。當涉及到足夠小的數據和足夠簡單的操作時,Excel是王者。然而,一旦你發現數據非常多時,它就會變成一種痛苦。當然,你可以使用Excel VBA來解決這些問題,但是在2020年,你感到慶幸,因為你不必這麼做!

如果有辦法把Excel和Python結合在一起,給Excel插上翅膀那就更好了!一個名為xlwings的python庫允許您通過VBA調用python腳本並在兩者之間傳遞數據。

為什麼要將Python與Excel VBA集成?

事實上,你可以在VBA中做任何事情。所以,如果是這樣,為什麼要使用Python?嗯,有很多原因。

  1. 你可以在Excel中創建自定義函數,而不必學習VBA
  2. 用戶在Excel的使用中感覺很舒服
  3. 使用Python可以顯著加快數據操作的速度
  4. 在Python中,幾乎所有東西都有庫(機器學習、數據科學等)
Python殺死Excel?我只會用Python來增強Excel!

準備使用xlwings

我們需要做的第一件事,就像我們想使用的任何新庫一樣,就是安裝它。這是非常容易做到的,通過兩個命令,我們很快就會建立起來。所以,繼續輸入你的終端:

<code>

pip

install xlwings/<code>

下載並安裝庫後,我們需要安裝Excel集成部分。確保已關閉所有Excel實例和任何終端類型:

<code>

xlwings

addin install/<code>

如果沒有遇到錯誤,你應該能夠繼續。但是在Win10 with Excel 2016上,人們經常會看到以下錯誤:

<code>

xlwings

0.17

.0

[Errno

2

]

No such file or directory:

'C:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART\\xlwings.xlam'

/<code>

如果你是一個幸運的人來經歷上述錯誤,你所需要做的就是創建丟失的目錄。通過使用mkdir命令,您可以很容易地做到這一點。就我而言,我做到了:

<code>

mkdir

C:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART/<code>

假設excel與python庫的集成安裝成功,你將注意到的主要區別是excel:

Python殺死Excel?我只會用Python來增強Excel!

為xlwings啟用用戶定義函數

首先,我們需要加載Excel加載項,你可以點擊Alt,L,H,然後導航到上面的目錄來加載插件。完成後,您應該能夠看到以下內容:

Python殺死Excel?我只會用Python來增強Excel!

最後,需要啟用對VBA工程對象模型的信任訪問。你可以通過導航到“文件>選項>信任中心>信任中心設置>宏設置”來執行此操作:

Python殺死Excel?我只會用Python來增強Excel!

xlwings入門

從Excel到Python(和返回)有兩種主要方式。第一個是直接從VBA調用Python腳本,另一個是通過用戶定義的函數。讓我們快速看一下兩者。

為了避免任何混亂,並有正確的設置每次,xlwings提供創建您的Excel電子表格,準備好了。然後讓我們使用這個功能。使用終端,我們導航到喜歡的目錄並鍵入:

<code>

xlwings

quickstart ProjectName/<code>

我叫這是MyFirstPythonXL。上面的命令將在預先導航的目錄中創建一個新文件夾,其中包含一個Excel工作表和一個python文件。

Python殺死Excel?我只會用Python來增強Excel!

打開.xlsm文件時,你會注意到一個名為xlwings.conf的新Excel工作表。如果要覆蓋xlwings的默認設置,你只需重命名此工作表並刪除起始下劃線。這樣,我們都準備好開始使用xlwings了。

VBA到Python

在我們開始編碼之前,讓我們首先確保我們都在同一頁上。要打開我們的Excel VBA編輯器,請按Alt+F11。這將返回以下屏幕:

Python殺死Excel?我只會用Python來增強Excel!

這裡要注意的關鍵是,此代碼將執行以下操作:

  1. 在與電子表格相同的位置查找Python腳本
  2. 查找與電子表格同名的Python腳本(但擴展名為.py)
  3. 在Python腳本中,調用函數“main()”

不用再費心了,讓我們來看看如何使用它的幾個例子。

例1:在Excel之外操作,並返回輸出

在本例中,我們將看到如何在Excel之外執行操作,但隨後將結果返回到電子表格中。這可以有無限多的用例。

我們將從CSV文件中獲取數據,對所述數據進行修改,然後將輸出傳遞給Excel。讓我們回顧一下這有多簡單:

首先,VBA代碼:

我把它與默認設置完全保持不變。

然後,Python代碼:

<code>

import

xlwings

as

xw

import

pandas

as

pd

def

main

()

:

wb = xw.Book.caller() df = pd.read_csv(

r'C:\temp\TestData.csv'

) df[

'total_length'

] = df[

'sepal_length_(cm)'

] + df[

'petal_length_(cm)'

] wb.sheets[

0

].range(

'A1'

).value = df/<code>

結果如下:

Python殺死Excel?我只會用Python來增強Excel!

示例2:使用Excel輸入驅動操作

在本例中,我們將從Excel讀取輸入,用Python對其進行處理,然後將結果傳遞迴Excel。

更具體地說,我們要讀一個問候語,一個名字和一個文件位置,在那裡我們可以找到笑話。然後,我們的Python腳本將從文件中隨機抽取一行,並返回一個笑話。

首先,VBA代碼:

我把它與默認設置完全保持不變。

然後,Python代碼:

<code>

import

xlwings

as

xw

import

randomdef random_line(afile): line = next(afile)

for

num, aline

in

enumerate(afile,

2

):

if

random.randrange(num):

continue

line = aline

return

line

'Function from: stackoverflowdef main(): wb = xw.Book.caller() listloc = str(wb.sheets[0].range('

B3

').value) fhandle = open(listloc, encoding = '

utf

-8

')wb.sheets[0].range('

A5

').value = wb.sheets[0].range('

B2

').value + '

' + wb.sheets[0].range('

B1

').value + '

here

is

a joke

for

you

' wb.sheets[0].range('

A6

').value = random_line(fhandle)

/<code>

結果如下:

Python殺死Excel?我只會用Python來增強Excel!


帶xlwings的用戶定義函數

我們將以與以前幾乎相同的方式更改python文件中的代碼。為了將某些內容轉換為Excel用戶定義函數,我們只需在函數所在的行之前包含“@xw.func”:

Python代碼:

<code>

import

xlwings

as

xw

def

joke

(x)

:

wb = xw.Book.caller() fhandle = open(

r'C:\Temp\list.csv'

)

for

i, line

in

enumerate(fhandle):

if

i == x:

return

(line)/<code>

結果如下:

Python殺死Excel?我只會用Python來增強Excel!

結論

我想你會同意這是一個非常好用的小工具。如果你和我一樣,更喜歡使用Python而不是VBA,但需要使用電子表格,那麼這可能是一個非常好的工具。


--END--

歡迎大家關注我們的公眾號:為AI吶喊(weainahan)

為了幫助更多缺少項目實戰的同學入門Python,我們在頭條上創建了一個專欄:《7小時快速掌握Pthon核心編程》歡迎大家點擊下方鏈接或者閱讀原文進行試看~

專欄

7小時內快速搞定Python核心編程

作者:為AI吶喊

160幣

0人已購

查看


分享到:


相關文章: