我已经阅读了几个线程,发现我可以使用 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] 删除。
我来说两句