如何从c ++调用python脚本(Clion)

时间:2017-06-23 22:35:46

标签: python c++ excel pywin32 win32com

好的,所以在互联网上搜索一下之后,我仍然有同样的问题。我有一个非常简单的python脚本,它打开指定的excel文件,然后运行一个宏。

我知道我的python脚本运行的事实应该是独立的。 我知道我的C ++代码应该运行它。

但两者的组合都会产生'com_error'。所以看到这个的人都知道,这些都是我运行的测试:

(1)简单的python脚本(只打印你好) - >通过 (2)使用C ++运行相同的简单.py脚本 - >通过 (3)更高级的python脚本(打开excel,运行宏,保存和关闭) - >通过 (4)usc C ++代码运行高级.py脚本 - >失败。

还有我的问题。这与win32com.client和服务器抛出的错误有关,因为它无法找到文件位置(但相信我可以,因为它通过了'查找文件'测试)

我正在运行Windows7,Python 2.7和最新版本的JetBrains Clion(2017.1.2)。

任何帮助都会非常感激。谢谢!快乐的编码。

C ++代码:

#include <iostream>
#include <Windows.h>

using namespace std;

int main() {
    const char *cmd = "python C:\\Users\\Alex.Valente\\Desktop\\python.py";

    PROCESS_INFORMATION processInformation = {0};
    STARTUPINFO startupInfo                = {0};
    startupInfo.cb                         = sizeof(startupInfo);




    BOOL result = CreateProcess(NULL, (LPSTR)cmd,
                                NULL, NULL, FALSE,
                                NORMAL_PRIORITY_CLASS,
                                GetEnvironmentStrings(), NULL, &startupInfo, &processInformation);
    if(!result){
        return -1;
    }
    WaitForSingleObject( processInformation.hProcess, INFINITE );
    return 0;
}

Python脚本:

from __future__ import print_function
import unittest
import os.path
import win32com.client
import os

class ExcelMacro(unittest.TestCase):
    def test_excel_macro(self):
            xlApp = win32com.client.DispatchEx('Excel.Application')
            xlsPath = r'C:\Users\Alex.Valente\Desktop\Data.csv'
            xlApp.Visible = True
            wb = xlApp.Workbooks.Open(Filename=xlsPath)
            xlApp.Run("PERSONAL.XLSB!PythonTest")
            wb.Save()
            wb.Close()
            xlApp.Quit()
            print("Macro ran successfully!")
if __name__ == "__main__":
    unittest.main()

运行后打印的错误:

======================================================================
ERROR: test_excel_macro (__main__.ExcelMacro)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\Alex.Valente\Desktop\python.py", line 25, in test_excel_macro
    wb = xlApp.Workbooks.Open(Filename=xlsPath)
  File "<COMObject <unknown>>", line 8, in Open
com_error: (-2147417851, 'The server threw an exception.', None, None)

----------------------------------------------------------------------
Ran 1 test in 6.305s

FAILED (errors=1)

0 个答案:

没有答案