好的,所以在互联网上搜索一下之后,我仍然有同样的问题。我有一个非常简单的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)