VBA - 调用 Python 脚本

菲利波

我已经阅读了几个线程,发现我可以使用 Shell 从 VBA 调用 Python。

这就是我所拥有的:

Private Sub CommandButton1_Click()

    Ret_Val = Shell("C:\Users\....\Anaconda3\python.exe C:\Users\...\REL.py", vbNormalFocus)

    If Ret_Val <> 0 Then
       MsgBox "ok!", vbOKOnly
    End If

End Sub

我确实收到了 OK 消息,并在一秒钟内打开和关闭了一个窗口。所以我猜它正在启动 Python 但脚本不起作用。

所以我认为这可能不起作用,因为我在 spyder 中编写了代码,我可能需要启动 spyder:

Ret_Val = Shell("C:\Users\...\Anaconda3\Scripts\spyder.exe C:\Users\...\REL.py", vbNormalFocus)

这将打开Spyder,这需要太多时间并且不是我想要的。此外,一旦打开,它就不会启动脚本。

出了点问题,但我不确定是由于 VBA 代码还是与脚本相关的其他问题。当我在没有 VBA 的情况下从 Spyder 运行该脚本时,该脚本有效。

这是 Python 代码的一个简单示例:

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 21 08:24:05 2017

@author: xxxxxx
"""
import pandas as pd
import numpy as np
import datetime

RW = pd.read_excel('Raw_data.xlsx', skipinitialspace=True) 
RW=pd.DataFrame(RW, columns = ['Task Id', 'TIDmodRW', 'Start Date', 'End Date', 'Machine', 'Boards'])

writerRW = pd.ExcelWriter('RW_test2.xlsx', engine='xlsxwriter')
RW.to_excel(writerRW, sheet_name='sheet1')
writerRW.save()
完美的

考虑使用内置os模块path.dirname()自动检测 python 脚本的当前路径以定位输入 Excel 文件(假设工作簿与 .py 脚本位于同一目录中)。然后,使用 OS-agnosticpath.join()将每个文件字符串与它连接起来以获得完整的目录引用。此方法不需要反斜杠(即 Windows)或正斜杠(即 Linux/Mac),因此应该跨操作系统工作。

所以现在,无论 Excel 文件和 Python 文件驻留在什么文件夹中,或者无论使用何种调用方法,包括 Spyder、VBA 或命令行,脚本都应该运行完全读取和写入本地工作簿。

import os                                                # ADD IMPORT
import pandas as pd
import numpy as np
import datetime

cd = os.path.dirname(os.path.abspath(__file__))          # LOCATE CURRENT DIR

# CONCATENATE CURRENT DIRECTORY TO EXCEL BASE FILE NAME
RW = pd.read_excel(os.path.join(cd, 'Raw_data.xlsx'), skipinitialspace=True) 
RW = pd.DataFrame(RW, columns = ['Task Id', 'TIDmodRW', 'Start Date', 
                                 'End Date', 'Machine', 'Boards'])

writerRW = pd.ExcelWriter(os.path.join(cd, 'RW_test2.xlsx'), engine='xlsxwriter')
RW.to_excel(writerRW, sheet_name='sheet1')
writerRW.save()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Excel VBA上调用python脚本?

来自分类Dev

从python脚本调用exe

来自分类Dev

从PHP调用Python脚本

来自分类Dev

从python调用Shell脚本

来自分类Dev

从 python 调用 shell 脚本

来自分类Dev

从VBA运行python脚本

来自分类Dev

在python脚本中调用python脚本

来自分类Dev

从python内部调用python脚本

来自分类Dev

从Excel-VBA脚本调用.reg文件

来自分类Dev

同时从并行Shell脚本调用Python脚本

来自分类Dev

在Python脚本中调用pstools

来自分类Dev

从python脚本调用Scrapy Spider?

来自分类Dev

从python脚本调用hive -e

来自分类Dev

从Shell脚本调用python函数

来自分类Dev

在Meteor中调用Python脚本

来自分类Dev

如何从CasperJS调用python脚本

来自分类Dev

从javascript调用本地python脚本

来自分类Dev

在Python脚本中调用pstools

来自分类Dev

如何从CasperJS调用python脚本

来自分类Dev

无法从Python脚本调用wget

来自分类Dev

Python:从脚本中调用函数

来自分类Dev

使用Python脚本调用别名

来自分类Dev

无法从 PHP 调用 Python 脚本

来自分类Dev

从 Pig 脚本调用 Python 函数

来自分类Dev

从Access VBA运行Python脚本

来自分类Dev

如何从调用python脚本的bash脚本转到调用bash脚本的python脚本?

来自分类Dev

如何使用xlwings v0.10调用Excel VBA脚本

来自分类Dev

在 HTML5 页面中调用 Vba 脚本

来自分类Dev

如何在 Outlook 中将 VBA 宏作为脚本调用