Хорошо, так что после поиска слишком много через Интернет у меня все еще есть моя проблема. У меня есть очень простой скрипт Python, который открывает указанный файл Excel, а затем запускает макрос.
Я точно знаю, что мой скрипт на Python работает так, как должен.
Я точно знаю, что мой код на C ++ работает так, как должен.
Но комбинация обоих создает ‘com_error’. Так что любой, кто видит это, знает, это все тесты, которые я провел:
(1) простой скрипт на Python (просто печатает привет) -> передано
(2) использовать C ++ для запуска того же простого скрипта .py -> передано
(3) больше скрипта на python advanecd (открывает Excel, запускает макрос, сохраняет и закрывает) -> pass
(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 Script:
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)
Задача ещё не решена.
Других решений пока нет …