【问题标题】:Calling Python script in excel as executable在excel中调用Python脚本作为可执行文件
【发布时间】:2014-11-21 00:07:40
【问题描述】:

我目前正在为一个与 python 2.7 和 excel 2013 交互的客户端开发一个工具,因此遇到了问题。

作为背景,我有一个想要作为可执行文件运行的 python 代码。客户端的计算机上没有 python,因此 exe 在没有 .py 的情况下运行至关重要。我已经使用 py2exe 将脚本从 .py 转换为 .exe。然后我试图用VBA调用那个.exe。当宏运行时,它看起来像是拉起命令提示符一秒钟,但它没有运行 .exe。但是,当我进入目录并双击 .exe 时,它​​运行良好并输出我想要的内容。

下面是我在 VBA 中的代码:

Dim folderPath As String
folderPath = Application.ActiveWorkbook.Path
ChDir folderPath

Dim stAppName As String
stAppName = folderPath & "\dist\MAT.exe"
Call Shell(stAppName, 1)

不确定我的 Shell 是否需要任何其他输入

任何帮助将不胜感激!

【问题讨论】:

  • 您的脚本是否对当前工作目录做出任何假设,例如仅在工作目录与脚本目录相同时才会运行?
  • 您是否能够启动其他可执行文件,例如notepad.exe,使用Shell()?
  • 要进一步评论...您应该尝试打开命令窗口到folderPath 之外的目录并使用完全限定的路径启动您的程序...您几乎可以肯定有一个错误回溯
  • 另外,你怎么知道它不运行exe? (这之间有什么明显的区别,比如说,它运行 exe,它立即退出,因为它没有找到任何可以工作的东西,或者它运行 exe,由于权限错误而引发未处理的异常并转储回溯在窗口关闭之前你看不到,等等?)
  • 还有一件事:folderPath & "\dist\MAT.exe" 真的是程序的正确路径吗? dist 目录是否保证与 .xls 文件位于同一目录中?

标签: python excel vba shell exe


【解决方案1】:

这是一个间接答案,更多地帮助您找出可能出现的问题

在你的主文件中将你的程序放在一个main 函数中(你没有有称它为main...你可以调用它)

def main():
   #do whatever

那么当你运行它时,如果它的 main 这样做

if __name__ == "__main__":
    try:
       main()
    finally:
       raw_input("Hit enter To Close...")

即使出现未捕获的错误,这也将保证您的窗口保持打开状态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多