Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从c++;(克莱恩)_Python_C++_Excel_Pywin32_Win32com - Fatal编程技术网

Python 如何从c++;(克莱恩)

Python 如何从c++;(克莱恩),python,c++,excel,pywin32,win32com,Python,C++,Excel,Pywin32,Win32com,好吧,在网上搜索有点太难了之后,我仍然有同样的问题。我有一个非常简单的python脚本,它打开指定的excel文件,然后运行宏 我知道一个事实,我的python脚本应该独立运行。 我知道,C++代码是应该运行的。 但两者的组合会产生一个“com_错误”。任何看到这一点的人都知道,这些是我进行的所有测试: (1) 简单python脚本(只打印hello)-->已通过 (2)使用C++运行相同的简单.Py脚本> (3) 更高级的ECD python脚本(打开excel、运行宏、保存和关闭)-->pa

好吧,在网上搜索有点太难了之后,我仍然有同样的问题。我有一个非常简单的python脚本,它打开指定的excel文件,然后运行宏

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

但两者的组合会产生一个“com_错误”。任何看到这一点的人都知道,这些是我进行的所有测试:

(1) 简单python脚本(只打印hello)-->已通过 (2)使用C++运行相同的简单.Py脚本> (3) 更高级的ECD python脚本(打开excel、运行宏、保存和关闭)-->pass (4)USC C++代码运行Advest.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;
}
以及运行后打印的错误:

======================================================================
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)
======================================================================
错误:test\u excel\u宏(\u主\u.excel宏)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
test\u excel\u宏中的文件“C:\Users\Alex.Valente\Desktop\python.py”,第25行
wb=xlApp.Workbooks.Open(文件名=xlsPath)
文件“”,第8行,处于打开状态
com_错误:(-2147417851,'服务器引发异常',无,无)
----------------------------------------------------------------------
在6.305s内运行1次测试
失败(错误=1)

为什么不通过bat或PowerShell脚本运行python脚本?这对于简单的任务尤其有用,比如当你只需要运行一些东西的时候。此外,Clion是一个IDE,与此问题无关。不过,如果您指定编译器可能会有所帮助。我包含IDE的唯一原因是,很多时候在IDE中编写代码时,它会创建一个虚拟环境,有时出于任何可能导致权限错误的原因。这可能是问题的原因,我认为这是什么。他们说python使用的是win23com.client,因为Clion在技术上是在其环境中运行代码的,它无法正确访问库,并且正在大吃一惊。这就是为什么我在CreateProsses调用中包含“GetEnvironmentStrings()”。但还是不起作用。我可能会尝试通过bat脚本来实现这一点。谢谢你的主意!为什么不通过bat或PowerShell脚本运行python脚本呢?这对于简单的任务尤其有用,比如当你只需要运行一些东西的时候。此外,Clion是一个IDE,与此问题无关。不过,如果您指定编译器可能会有所帮助。我包含IDE的唯一原因是,很多时候在IDE中编写代码时,它会创建一个虚拟环境,有时出于任何可能导致权限错误的原因。这可能是问题的原因,我认为这是什么。他们说python使用的是win23com.client,因为Clion在技术上是在其环境中运行代码的,它无法正确访问库,并且正在大吃一惊。这就是为什么我在CreateProsses调用中包含“GetEnvironmentStrings()”。但还是不起作用。我可能会尝试通过bat脚本来实现这一点。谢谢你的主意!
======================================================================
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)