Python讀取含有VBA宏的Excel數(shù)據(jù)

摘要: 因?yàn)楝F(xiàn)在項目在開發(fā)新的API,我需要根據(jù)API方法論去校驗(yàn)這個API的計算邏輯和計算結(jié)果是否正確,而且需要將計算邏輯用Excel記錄下來,所以就用了Excel的VBA。

1. 什么是VBA?

具體含義大家可以看百度百科,我就直接上圖了,每個單元格都是調(diào)用了VBA的宏計算語言函數(shù),我就簡稱這個Excel含有macro計算邏輯吧。

2.問題是什么?

大家都知道要比較一個API的準(zhǔn)確性,我們需要自己根據(jù)方法論去把所有原始數(shù)據(jù)都推演計算一遍,得到結(jié)果。然后在跟開發(fā)做的API response做下對比,如果兩個結(jié)果相同,則表示這個API計算正確。

現(xiàn)在我們PO不讓我重寫一遍開發(fā)的計算邏輯了,規(guī)定所有計算相關(guān)的邏輯都在Excel里面做好計算模板sheet,然后我將所有原始數(shù)據(jù)都放到計算模板同一個文件夾下。在含有Marco計算邏輯的那個excel(計算模板sheet)里面完成數(shù)據(jù)的引用和計算。

然后將API返回的Response也寫入到同目錄下的一個Excel中(樣式跟計算模板計算出來的結(jié)果相同),模板里面將比較API response和Excel中的計算結(jié)果,然后輸出一個如上圖一樣的一個sheet頁(二維矩陣,單元格里的內(nèi)容是TRUE或者FALSE)。

我要做的就是:將原始數(shù)據(jù)放到規(guī)定名字和格式的Excel中,將最終API的response也放到Excel中,然后打開這個含有macro函數(shù)的excel,查看sheet頁中是否含有FALSE,如果有,告訴對應(yīng)的行和列名稱并輸出。若是沒有FALSE,這說明比對通過,API pass。

難點(diǎn)是:

我用Python寫函數(shù),現(xiàn)在Python用pandas打開這個含有Macro函數(shù)的Excel后,讀出的數(shù)據(jù)永遠(yuǎn)都是Nan,因?yàn)樗荒茏R別那些macro函數(shù)。。。所以我無法判斷該API是否pass。

3. 手動操作Excel的時候要怎樣看到是TRUE或FALSE呢?

在打開這個有macro函數(shù)的Excel之前,我們需要打開所有它引用的其他Excel。然后回到這個Excel的時候,這些宏會自動引用其他excel相應(yīng)的數(shù)據(jù),并得出計算結(jié)果。

4. 用Python要怎樣實(shí)現(xiàn)這一手動邏輯呢?

在Python中調(diào)用VBA去控制這些Excel即可。

5. 具體要怎樣實(shí)現(xiàn)呢?

a. 下載Python擴(kuò)展包: pywin32 (這個有32和64位之分)

可以直接去下載zip文件,然后安裝;

但我建議直接用命令: pip install pywin32?

b. 在自己python文件中引用: ?

from win32com import client

c. 在python中寫VBA:


finally中的語句非常關(guān)鍵,相當(dāng)于open一個文件之后進(jìn)行讀寫,最終一定要關(guān)閉對應(yīng)的io流一樣!

那個計算模板是不允許改動的,所以在關(guān)閉那個xlBook的時候總是提示是否需要保存,在Jenkins上配置這個Project之后,所有相關(guān)操作肯定是無法手動干預(yù)的。所以我就采取了最直接的方式:

xlApp.DisplayAlerts = 0 ?

就是不彈出所有提示框。

先關(guān)閉計算模板Excel,然后關(guān)閉該Excel依賴的所有其他Excel。

最后退出Excel應(yīng)用程序。

(若是最后退出程序以后發(fā)現(xiàn)還有一個空白的Excel窗口,這時候可以用 xlApp.visible=0 來隱藏)

所有這些都執(zhí)行完了以后,這些被操作過的文件就不會被鎖住了。(若是被鎖住,以后用python讀取的時候都會提示IOException哦~~)


因?yàn)轫椖刻α?,所以寫的都是流水賬,如果大家有什么更好的建議或者疑問,可以給我留言哦,謝謝閱讀~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 因?yàn)楝F(xiàn)在項目在開發(fā)新的API,我需要根據(jù)API方法論去校驗(yàn)這個API的計算邏輯和計算結(jié)果是否正確,而且需要將計算邏...
    Vicky_習(xí)慣做唯一閱讀 2,513評論 0 7
  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動化還是充滿挑戰(zhàn)性的領(lǐng)域.對每個需要自動化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 22,137評論 6 49
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,832評論 6 427
  • 在第二屆中小學(xué)閱讀寫作培訓(xùn)研討會上,兩天半的時間,聆聽了多位教育專家的精彩講座,收獲了很多書本上沒有的知識。 朱自...
    bai素心若雪閱讀 765評論 5 6
  • 本文內(nèi)容為得到專欄《通往財富自由之路》的讀書筆記。 關(guān)鍵字:有價值的聯(lián)系 愛面子 讀者提問: 最近工作進(jìn)入一個集中...
    凱天閱讀 130評論 0 0

友情鏈接更多精彩內(nèi)容