Python+xlwings操作Excel實(shí)戰(zhàn)

Excel是全世界最普及最強(qiáng)大的辦公軟件,應(yīng)該沒有之一。excel就相當(dāng)于是一只老虎,python相當(dāng)于是一雙翅膀,兩者結(jié)合將產(chǎn)生“如虎添翼”的效果。好了,不賣關(guān)子了,今天我們要跟大家說到的是excel+xlwings(xlwings是一個(gè)Python包),能直接在excel中執(zhí)行python代碼。這意味著什么?意味著你的excel已經(jīng)具備編程的能力了!比如你可以在excel中一鍵抓取數(shù)據(jù)直接存儲(chǔ)下來,比如面對(duì)VBA比較棘手的問題用xlwings(本質(zhì)上還是python)可以輕松解決,比如可以提高大文件處理速度......更多的可以盡情的想象!

一、先來說個(gè)例子

我相信看完以上這段話后,很多人還是持有懷疑的態(tài)度,所以我先直接來上一個(gè)案例,讓大家比較直觀的感受一下“excel飛一樣”是什么感覺。這里以一個(gè)融資機(jī)構(gòu)員工的日常為例,他可能每天需要查看一下獨(dú)角獸公司的榜單,如果按照正常的,要打開瀏覽器訪問 https://www.itjuzi.com/unicorn,然后獲取信息。如果想要記錄每天的數(shù)據(jù),還得一個(gè)個(gè)手動(dòng)記錄下來,繁雜程度可想而知。這時(shí)候我們可以通過xlwings,自動(dòng)幫我抓取數(shù)據(jù),然后保存數(shù)據(jù),甚至自動(dòng)的做一些計(jì)算,大大提高了我們的工作效率。以下用一個(gè)動(dòng)態(tài)度來感受一下:

在這里插入圖片描述

可以看到,我只要點(diǎn)擊一下excel中的一個(gè)按鈕,便能自動(dòng)的下載數(shù)據(jù)?,F(xiàn)在還只是少量數(shù)據(jù),如果數(shù)據(jù)量比較多,獲取數(shù)據(jù)步驟比較復(fù)雜,用代碼操作的優(yōu)勢(shì)會(huì)更加的明顯。

二、怎么操作

如果能堅(jiān)持看到這里的朋友,說明對(duì)這玩意兒還是挺認(rèn)可的。那么接下來我就詳細(xì)的講一下這個(gè)東西的配置。建議先收藏一下,步驟有點(diǎn)多,然后找個(gè)時(shí)間練練,有問題歡迎關(guān)注公眾號(hào):pythonjs,私信咨詢。

先來說下需要準(zhǔn)備的東西吧:

  1. Excel自然不用說了,最好是用微軟的Office,畢竟WPS有些地方有點(diǎn)不同,會(huì)造成學(xué)習(xí)的困擾。
  2. Python(3.6以上版本),可以在python官網(wǎng):python.org下載,也可以私信我,我給你發(fā)軟件。
  3. 安裝完python后需要下載一些包,包括網(wǎng)絡(luò)請(qǐng)求的requests庫,xlwings,以及pandas,還有一個(gè)pywin32。包安裝的方式是在cmd中通過pip安裝,比如pip install requests。這里不再贅述,python基礎(chǔ)課程可以加VX:zhiliaoketang008,即可免費(fèi)獲取。

東西準(zhǔn)備好了后,咱們?cè)賮碓敿?xì)講解一下如何配置,這過程稍微有點(diǎn)復(fù)雜,建議先收藏,以后慢慢看。

第一步、開啟宏支持:

Excel 文件 - 選項(xiàng) - 信任中心 - 宏設(shè)置 - 啟用所有宏


在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

第二步、顯示“開發(fā)工具”選項(xiàng)卡:

Excel選項(xiàng) - 自定義功能區(qū) - 開發(fā)工具(勾選)


在這里插入圖片描述

這樣,我們?cè)趀xcel文件菜單欄中就能看到“開發(fā)工具”選項(xiàng)了:


在這里插入圖片描述

第三步、另存為啟用宏的工作簿(*.xlsm):

在這里插入圖片描述

然后在類型中,選擇xlsm格式的:


在這里插入圖片描述

第四步、在菜單欄中顯示xlwings選項(xiàng)卡:

找到xlwings安裝目錄下的addin文件夾(在python的site-packages目錄下。比如我的python是安裝在C:\python中,那么路徑就是:C:\python\Lib\site-packages\xlwings\addin),然后有一個(gè)叫做“xlwings.xlam”文件,我們雙擊它,再回到excel文件,就能在菜單欄中看到xlwings選項(xiàng)卡了。


在這里插入圖片描述

以上設(shè)置完成后,還需要在VBA中進(jìn)行引用的設(shè)置。開發(fā)工具 - 查看代碼


在這里插入圖片描述

然后點(diǎn)擊工具 - 引用,找到xlwings,點(diǎn)擊確定即可。
在這里插入圖片描述

第五步、設(shè)置excel中的python解釋器和執(zhí)行文件:

在xlwings選項(xiàng)卡的左邊,有一個(gè)Interpreter,這個(gè)是用來設(shè)置python解釋器的,我們只要把python的安裝路徑拷貝進(jìn)入,然后加上\python.exe就可以了(同理,比如我的python是安裝在C:\python,那么我的解釋器路徑就是C:\python\python.exe)。

另外有一個(gè)PYTHONPATH,這個(gè)是用來設(shè)置你的python代碼文件路徑。比如我是放到D:\XX20200316\路徑下的app.py文件中,那么PYTHONPATH設(shè)置就是D:\XX20200316\路徑下的app.py。以上看似復(fù)雜,其實(shí)只要依葫蘆畫瓢即可。當(dāng)然有任何問題也可以私信我。

第六步、開始編寫python代碼:

在這里,我們就可以找到之前說的那個(gè)app.py,也就是PYTHONPATH設(shè)置的那個(gè)文件,然后寫入抓取數(shù)據(jù)的代碼,以及保存數(shù)據(jù)的代碼了。代碼具體細(xì)節(jié)不展開來討論,這里面的語法比較多,如果想要學(xué)習(xí)python的,可以私聊我獲取視頻課程。代碼如下:

import xlwings as xw
import requests
import pandas as pd

# IT桔子爬蟲
class ITJuziSpider:
def __init__(self):
    self.url = "https://www.itjuzi.com/api/nicorn?com_name="
    self.headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"authorization": '"bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvd3d3Lml0anV6aS5jb21cL2FwaVwvYXV0aG9yaXphdGlvbnMiLCJpYXQiOjE1ODQzNTA4MTUsImV4cCI6MTU4NDM1NDQxNSwibmJmIjoxNTg0MzUwODE1LCJqdGkiOiI3eHVCTGpwVFB2cHRRam5WIiwic3ViIjo4MjE0NjMsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjciLCJ1dWlkIjoiUG1lQms0In0.YyDMDbphFcn7dMehLD2cBU2UTfRE34TFqFXykygVX8U"',
"cookie": '_ga=GA1.2.1593594823.1584350704; _gid=GA1.2.1296895333.1584350704; Hm_lvt_1c587ad486cdb6b962e94fc2002edf89=1584350704; juzi_user=821463; juzi_token=bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvd3d3Lml0anV6aS5jb21cL2FwaVwvYXV0aG9yaXphdGlvbnMiLCJpYXQiOjE1ODQzNTA4MTUsImV4cCI6MTU4NDM1NDQxNSwibmJmIjoxNTg0MzUwODE1LCJqdGkiOiI3eHVCTGpwVFB2cHRRam5WIiwic3ViIjo4MjE0NjMsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjciLCJ1dWlkIjoiUG1lQms0In0.YyDMDbphFcn7dMehLD2cBU2UTfRE34TFqFXykygVX8U; Hm_lpvt_1c587ad486cdb6b962e94fc2002edf89=1584350929; _gat_gtag_UA_59006131_1=1',
"referer": 'https://www.itjuzi.com/unicorn',
"curlopt_followlocation": "true"
    }


def run(self):
    # 獲取當(dāng)前excel對(duì)象
    wb = xw.Book.caller()
    sheet = wb.sheets[0]
    # 爬取數(shù)據(jù),非常簡(jiǎn)單的代碼
    resp = requests.get(self.url,headers=self.headers)
    result = resp.json()
if "data" in result and "data" in result['data']:
      companies = result['data']['data']
      names = list(companies[0].keys())
      data_list = []
for company in companies:
        values = list(company.values())
        data_list.append(values)
      # 變成一個(gè)dataframe對(duì)象
      df = pd.DataFrame(data=data_list,columns=names)
# 設(shè)置到excel文件中
      sheet.range("A4").options(index=False).value = df

第七步:插入按鈕,綁定宏:

我們?cè)趀xcel中創(chuàng)建一個(gè)按鈕,然后給按鈕綁定一個(gè)宏,然后再在宏中調(diào)用剛剛寫好的python代碼,就是這么簡(jiǎn)單。

開發(fā)工具 - 插入 - 表單控件(按鈕):


在這里插入圖片描述

選中按鈕,右鍵,指定宏,點(diǎn)擊編輯:


在這里插入圖片描述

在這里插入圖片描述

寫入以下代碼:
在這里插入圖片描述
Sub hi()
RunPython ("from app import ITJuziSpider; ITJuziSpider().run()")
End Sub

最后,點(diǎn)擊按鈕,代碼就能執(zhí)行起來了。當(dāng)然你的執(zhí)行過程可能會(huì)報(bào)錯(cuò),這中間還涉及到一些包的版本問題。遇山開山,遇水搭橋,報(bào)什么錯(cuò),到百度上搜索一下,很多問題都是別人遇到過的。

沒有接觸過編程的朋友,看起本文來肯定比較吃力,這個(gè)是能理解的。這也正說明了一個(gè)問題,你的能力需要提升了,python現(xiàn)在已經(jīng)把“魔抓”伸向自動(dòng)化辦公的領(lǐng)域了,也許今天你手動(dòng)操作還依然能扛得住,但是三年、四年之后,你的這點(diǎn)體力活會(huì)被代碼無情的代替了。不要憤怒,這就是現(xiàn)實(shí),適者生存。

最后還是一樣,代碼可以關(guān)注公眾號(hào):pythonjs,回復(fù)“xlwings”,即可免費(fèi)獲??!

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

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

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