安装 xlwings 之后,xlwings 库在我们的电脑中放置了一个名为 xlwings.xlam 的 Excel 加载宏文件,这个文件的位置在Python 安装文件夹下面的 site-packages 文件夹中。在我的我电脑上加载宏 (Excel Addin) 文件位置为:

什么是 Excel 加载宏文件呢?我之前写过一篇博客:如何在 VBA 中运行 Excel Add-in 中的代码,文中有解释,也说明了使用方法,请自行参考。
打开 xlwingshello.xlam 文件,切换到【开发工具】选项卡,如果没有出现【开发工具】选项卡,请打开自定义功能区对话框,将选项卡 “开发工具”勾上,默认 Excel 是不显示“开发工具”选项卡的:

切换到【开发工具】,点击【Visual Basic】,进入 Visual Basic Editor (VBE) 环境,进入 VBE 环境的快捷键是 Alt + F11:


我们看到,在 VBA 中调用 Python 代码,需要 xlwings.xlam 加载宏提供支持,但实际上,此时直接运行 Module 1 中自动生成的代码会提示错误,因为并没有成功加载 xlwings.xlam 加载宏,出现引用丢失,原因是 xlwingshello.xlsm 文件中加载宏的位置是写死的,所以不可能适用每一台 PC,我们需要用手工方式来加载。加载方法:在 VBE 环境中通过菜单 【工具】-【引用】打开“引用”对话框,下图显示了“引用”丢失。

怎么解决呢?可以把刚才安装路径下的 xlwings.xlam 文件拷贝到工程所在目录,也可以拷贝到 Excel 默认的加载项位置。这个位置使用下面的方法获得:调出 VBE 环境的立即窗口,在立即窗口中输入:
debug.Print Application.UserLibraryPath
得到的位置就是默认加载项位置。

将文件拷到到 Addins 文件夹,然后回到 Excel 界面,切换到【开发工具】功能区,点击【Excel 加载项】:

默认位置的加载项自动出现在列表中,选中 xlwings ,点击确定按钮。

再进入 VBE 环境,打开库引用对话框,勾上 xlwings:

然后运行 xlwingshello.xlam 中的示例代码,此时能成功运行。
Sub SampleCall()
mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
RunPython ("import " & mymodule & ";" & mymodule & ".hello_xlwings()")
End Sub
这段代码导入文件夹下同名的 Python 模块,调用模块中 hello_xlwings()·
方法:
import xlwingshello
xlwingshello.hello_xlwings()
我们再看看 hello_xlwings()
函数:
def hello_xlwings():
wb = xw.Book.caller()
wb.sheets[0].range("A1").value = "Hello xlwings!"
关于 xlwings.xlam 加载宏,其实 xlwings 还提供了一种命令行安装的方法,可以在 pip install xlwings
命令之后,在命令行窗口输入下面的命令安装:
xlwings addin install
addin install
命令在电脑上只需要运行一次,xlwings 将 xlwings.xlam 文件拷贝到 Excel 启动时自动加载的文件夹 (XLSTART),这样每次启动 Excel 就会自动加载这个加载宏。个人觉得不如放在 Addins 文件夹灵活。在 VBE 的立即窗口,通过下面的命令:
? application.StartupPath
获取 xlstart 文件夹位置。
Excel uses the xlstart folder to hand a number of its features. The first time most users find out about the xlstart folder is when their personal.xls file is saved there after recording their first macro. Excel uses the personal.xls file to store macros that users want to access globally in all Excel files.
Excel opens all files in the xlstart folder when it starts up. If you want a particular file to open each day, for example, if you use a spreadsheet based timesheet, then you can save the file in the xlstart folder.
from: https://accessanalytic.com.au/xlstart-folder/
从调用者 (caller()
) 得到 workbook,然后将 “Hello, xlwings!” 写入到 A1 单元格。
仿照这个调用模式,我们在 xlwingshello.py
中新增下面的代码:
import xlwings as xw
import pandas as pd
from sqlalchemy import create_engine
def upload_employees():
url = "mysql+pymysql://root:pwd@localhost:3306/stonetest?charset=utf8"
engine = create_engine(url)
emp_data = pd.read_sql("select * from emp_master", engine)
wb = xw.Book.caller()
wb.sheets[0].range("A2").options(index=True).value = emp_data
xlwings 支持 pandas DataFrame,这就太方便了。打开 xlwingshello.xlsm,新增一个 subroutine 如下:
Public Sub UploadEmployee()
mymodule = "xlwingshello"
RunPython ("import " & mymodule & ";" & mymodule & ".upload_employees()")
End Sub
在这个 Excel VBA 的模块中,VBA 调用 Python 模块中的 upload_employees()
,将 emp_master
数据导入到工作表中。
说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球仍有7.5亿忠实用户,而作为网红语言的Python,也仅仅只有700万的开发人员。
Excel是全世界最流行的编程语言。对,你没看错,自从微软引入了LAMBDA定义函数后,Excel已经可以实现编程语言的算法,因此它是具备图灵完备性的,和JavaScript、Java、Python一样。
虽然Excel对小规模数据场景来说是刚需利器,但它面对大数据时就会有些力不从心。
@Date: 2020-06-30 14:27:25
@LastEditTime: 2020-07-26 19:59:47
@Email: str-liang@outlook.com
@FilePath: /undefinedc:/Users/mayn/Downloads/te
那么怎么通过xlwings调用这宏呢:
首先要安装winPython或者其他Python,pip install xlwings,winPython默认安装xlwings。
import xlwings as xw
vba_bo
import win32com.client
filepathb = r"C:\Users\GZTSALFIEL\Desktop\excel问题文件\testdoc\PI High Level Checking_v1.3.2.xlsm"
xls = win32com.client.Dispatch("Excel.Application")
xls...
http://club.excelhome.net/thread-1452827-1-1.html
今天讲一下怎么在vba里面使用python的自定义函数。在vba板块提下python主要是python的包很多。对于我们来说,直接拿轮子过来用用肯定是很好的事情,复杂的原理,背后的算法与我无关。通过沟通python和excel主要是通过一个名为xlwings的加载项作为连接的纽带,从而实现互通。下面主要写以下几点:1.如何搭建excel和python交互的环境
python软件...
DocCleaner 0.2
一个使用XSLT 1.0编辑基于XML的压缩文件(例如docx或odt文件)的python命令行实用程序。 使用XSL样式表可以很容易地扩展它。
它主要用于自动执行一些复制编辑任务(例如,删除本地格式,根据语言的排版规则更正不间断空格,检查智能引号的使用等)。
与使用VBA或OOBASIC宏相比,这通常是一种更有效,更可靠的方法,尤其是在大型文档上。 此外,它独立于所使用的操作系统和文字处理器。
开发了用于文本处理软件(Microsoft Word,LibreOffice)的插件。
目前不再积极开发,欢迎提供补丁和建议!
经过Python 2.7和3.4测试。
您需要为要应用于文档的每个处理创建一个XSL文件。
xsl将应用于压缩文件中包含的所有xml“子文件”。 在“ .path”文件中定义了一组这些子文件(例如,在“ docx”或“
cals.py-Module显示电子交付摘要
setenv.cmd-使用随QGIS一起安装的Python的首选项
mkPyProj.bat-为Visual Studio生成启动文件
whyPython.pptx-入门指南
./CALS-用于电子交付的xml示例
./cheatSheet-备忘单
./vs_VBA-与VBA的比较
./util-实用程序
./useGdal-使用osgeo包的示例
主要功能:
VBA代码库收藏管理, VBA中文代码库输入提示, VBA变量名首字母输入提示 VBA函数过程输入提示, VBA代码自动对齐排版, VBA代码混淆, VBA工程密码破解, Excel VBA模块隐藏保护, VBA颜色修改器, VBA代码行号显示
亮点功能:
关键字+空格, 神键手输入提示,代码智能补齐 双击Tab代码对齐, ALT+L字符串拼接, SHIFT+ENTER自动换行,括号自动补齐,代码区中文标点符号自动矫正,窗体控件批量生成 ,变量名及函数名中文拼音首字母输入提示, 代码行号
所有windows7以上系统的的VBA环境都可以
Excel VBA代码助手,word VBA代码助手,ppt VBA代码助手,Outlook VBA代码助手,Access VBA代码助手,AutoCad VBA代码助手....
Excel-Press是Microsoft Office专有的VBA压缩和解压缩算法的Python实现。
具有'.xls'文件扩展名(Excel 97-2003)的Excel文件本质上是zip文件。 但是,已经有广泛的工具来解压缩和解压缩这些VBA宏的内容。 我找不到Microsoft VBA压缩算法的Python实现。
:用于压缩或解压缩VBA宏文件的Python脚本
:压缩格式的VBA宏
:解压缩后的VBA宏
:包含VBA宏的Excel文档
:内容 .xls扩展后更改为.zip或解压
:解压缩后的完整VBA宏文件
解压缩已经压缩的VBA宏文件
python excel-press.py -d ./examples/Module1
仅输出压缩的VBA文件的VBA宏部分
python excel-press.py -d ./example
前面的文章《Python Pandas库批量处理Excel数据》简单介绍了利用Python的pandas库对大量的Excel文件进行合并,数据清洗等操作;pandas非常适合对大数据量的数据进行清洗和合并。但是在实际的工作中,除了像前文介绍那样对数据进行合并清洗外,还涉及其他的Excel表格数据的处理,这些数据的处理相对来说比较繁琐。
我们GIS行业涉及非常多的外业数据调查相关的工作,这些类似的项目都是需要根据外业调查获取到的信息填写到内业的表格中。根据外业调查表,按照一定规则更新对应的内业表信息,逻辑非