Excel是全世界最普及最强大的办公软件,应该没有之一。excel就相当于是一只老虎,python相当于是一双翅膀,两者结合将产生“如虎添翼”的效果。好了,不卖关子了,今天我们要跟大家说到的是excel+xlwings(xlwings是一个Python包),能直接在excel中执行python代码。这意味着什么?意味着你的excel已经具备编程的能力了!比如你可以在excel中一键抓取数据直接存储下来,比如面对VBA比较棘手的问题用xlwings(本质上还是python)可以轻松解决,比如可以提高大文件处理速度......更多的可以尽情的想象!
一、先来说个例子
我相信看完以上这段话后,很多人还是持有怀疑的态度,所以我先直接来上一个案例,让大家比较直观的感受一下“excel飞一样”是什么感觉。这里以一个融资机构员工的日常为例,他可能每天需要查看一下独角兽公司的榜单,如果按照正常的,要打开浏览器访问 https://www.itjuzi.com/unicorn,然后获取信息。如果想要记录每天的数据,还得一个个手动记录下来,繁杂程度可想而知。这时候我们可以通过xlwings,自动帮我抓取数据,然后保存数据,甚至自动的做一些计算,大大提高了我们的工作效率。以下用一个动态度来感受一下:
可以看到,我只要点击一下excel中的一个按钮,便能自动的下载数据。现在还只是少量数据,如果数据量比较多,获取数据步骤比较复杂,用代码操作的优势会更加的明显。
二、怎么操作
如果能坚持看到这里的朋友,说明对这玩意儿还是挺认可的。那么接下来我就详细的讲一下这个东西的配置。建议先收藏一下,步骤有点多,然后找个时间练练,有问题欢迎关注公众号:pythonjs,私信咨询。
先来说下需要准备的东西吧:
- Excel自然不用说了,最好是用微软的Office,毕竟WPS有些地方有点不同,会造成学习的困扰。
- Python(3.6以上版本),可以在python官网:python.org下载,也可以私信我,我给你发软件。
- 安装完python后需要下载一些包,包括网络请求的requests库,xlwings,以及pandas,还有一个pywin32。包安装的方式是在cmd中通过pip安装,比如pip install requests。这里不再赘述,python基础课程可以加VX:zhiliaoketang008,即可免费获取。
东西准备好了后,咱们再来详细讲解一下如何配置,这过程稍微有点复杂,建议先收藏,以后慢慢看。
第一步、开启宏支持:
Excel 文件 - 选项 - 信任中心 - 宏设置 - 启用所有宏
第二步、显示“开发工具”选项卡:
Excel选项 - 自定义功能区 - 开发工具(勾选)
这样,我们在excel文件菜单栏中就能看到“开发工具”选项了:
第三步、另存为启用宏的工作簿(*.xlsm):
然后在类型中,选择xlsm格式的:
第四步、在菜单栏中显示xlwings选项卡:
找到xlwings安装目录下的addin文件夹(在python的site-packages目录下。比如我的python是安装在C:\python中,那么路径就是:C:\python\Lib\site-packages\xlwings\addin),然后有一个叫做“xlwings.xlam”文件,我们双击它,再回到excel文件,就能在菜单栏中看到xlwings选项卡了。
以上设置完成后,还需要在VBA中进行引用的设置。开发工具 - 查看代码
然后点击工具 - 引用,找到xlwings,点击确定即可。
第五步、设置excel中的python解释器和执行文件:
在xlwings选项卡的左边,有一个Interpreter,这个是用来设置python解释器的,我们只要把python的安装路径拷贝进入,然后加上\python.exe就可以了(同理,比如我的python是安装在C:\python,那么我的解释器路径就是C:\python\python.exe)。
另外有一个PYTHONPATH,这个是用来设置你的python代码文件路径。比如我是放到D:\XX20200316\路径下的app.py文件中,那么PYTHONPATH设置就是D:\XX20200316\路径下的app.py。以上看似复杂,其实只要依葫芦画瓢即可。当然有任何问题也可以私信我。
第六步、开始编写python代码:
在这里,我们就可以找到之前说的那个app.py,也就是PYTHONPATH设置的那个文件,然后写入抓取数据的代码,以及保存数据的代码了。代码具体细节不展开来讨论,这里面的语法比较多,如果想要学习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):
# 获取当前excel对象
wb = xw.Book.caller()
sheet = wb.sheets[0]
# 爬取数据,非常简单的代码
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)
# 变成一个dataframe对象
df = pd.DataFrame(data=data_list,columns=names)
# 设置到excel文件中
sheet.range("A4").options(index=False).value = df
第七步:插入按钮,绑定宏:
我们在excel中创建一个按钮,然后给按钮绑定一个宏,然后再在宏中调用刚刚写好的python代码,就是这么简单。
开发工具 - 插入 - 表单控件(按钮):
选中按钮,右键,指定宏,点击编辑:
写入以下代码:
Sub hi()
RunPython ("from app import ITJuziSpider; ITJuziSpider().run()")
End Sub
最后,点击按钮,代码就能执行起来了。当然你的执行过程可能会报错,这中间还涉及到一些包的版本问题。遇山开山,遇水搭桥,报什么错,到百度上搜索一下,很多问题都是别人遇到过的。
没有接触过编程的朋友,看起本文来肯定比较吃力,这个是能理解的。这也正说明了一个问题,你的能力需要提升了,python现在已经把“魔抓”伸向自动化办公的领域了,也许今天你手动操作还依然能扛得住,但是三年、四年之后,你的这点体力活会被代码无情的代替了。不要愤怒,这就是现实,适者生存。
最后还是一样,代码可以关注公众号:pythonjs,回复“xlwings”,即可免费获取!