Python VBA提取以获取宏的二进制代码。

3

我正在尝试使用Python将vba_project添加到工作簿的"Sheet1"中。

我正在按照XLSXWRITER文档的指示,从不同的工作表中获取VBA代码的bin文件,然后将其用于我的新工作簿的“Sheet1”中。

我在命令提示符中输入以下代码,但是出现了错误:“'vba_extract.py'不被认为是内部或外部命令”

$ vba_extract.py Book1.xlsm
Extracted: vbaProject.bin

有人能够为我提供关于如何使用Python从旧文件中提取宏作为二进制文件,然后将其输入到新工作簿的Sheet1中的逐步说明吗?

2个回答

6

我今天解决了这个问题,想在这里留下来让未来的人们使用。弄清楚如何做这件事是非常令人沮丧的。如果您正在使用Pandas库,则这也是相关的。请确保还安装了xlsxwriter。

1.点击Windows开始按钮,输入“cmd”并单击它以运行命令提示符。

2.一旦打开,您需要找到vba_extract.py文件所在的位置。对于我来说,它在这里:

C:\Users\yourusername\AppData\Local\Programs\Python\Python36-32\Scripts\vba_extract.py

3. 现在,您需要获取您想要提取的 .xlsm 文件的路径。如果您没有制作过 .xlsm 文件,请制作一个。以下是一个示例:

C:\Users\yourusername\Desktop\excelfilename.xlsm

4.现在回到命令提示符。这就是您需要输入的内容。您将使用步骤2和3中的两个项目进行合并,并按Enter键。如下:

C:\Users\yourusername\AppData\Local\Programs\Python\Python36-32\Scripts\vba_extract.py C:\Users\yourusername\Desktop\excelfilename.xlsm

如果成功了,它会告诉你这个:
Extracted: vbaProject.bin

5. 对于这一点我不太确定。我认为您的.xlsm文件所在的位置也是.bin文件的存放位置。在此示例中,它出现在我的桌面上。它将包含您在原始的.xlsm文件中创建或使用的所有宏。

C:\Users\yourusername\Desktop/vbaProject.bin

以下是完整代码中使用它的示例:
import pandas
import xlsxwriter

df_new = pd.read_csv('C:\\Users\\yourusername\\Desktop\\CSV1.csv')
writer = pd.ExcelWriter('C:\\Users\\yourusername\\Desktop\\CSV1.xlsx')
df_new.to_excel(writer, index = False, sheet_name = 'File Name', header = False)
pandaswb = writer.book
pandaswb.filename = 'C:\\Users\\yourusername\\Desktop\\newmacroexcelfile.xlsm')
pandaswb.add_vba_project(r'C:\Users\yourusername\Desktop/vbaProject.bin')
writer.save()

5

您需要告诉命令提示符(cmd)您正在运行一个Python文件。

尝试使用以下批处理代码:

cd C:\path\of\yourfile.py
python vba_extract.py Book1.xlsm

编辑: 添加cd命令,您需要进入Python文件所在的文件夹。


我收到了“python: 无法打开文件 'vba_extract.py': [Errno 2] 没有那个文件或目录”的错误信息。 - Ariel
首先运行 cd /the/path/of/pithon_file 然后运行 python vba_extract.py Book1.xlsm - Stefano
好的,我已经得到了vbaProject.bin文件,它与我的主Python脚本“macroProject.py”在同一个文件夹中。当我在代码中添加workbook.add_vba_project('vbaProject.bin')时,它显示AttributeError:'Workbook'对象没有属性'add_vba_project'。 - Ariel
1
我认为你需要针对这个错误开一个新的问题。 - Stefano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接