У меня есть сценарий PY3, который использует Win32COM для создания экземпляра нового экземпляра Excel и попытки открыть существующий файл .xlsx — в общем, это не удается при вызове через Tomcat/CGI в Windows:
sys.stdout.write("Content-Type: text/html\n\n")
excel = DispatchEx('Excel.Application')
dir = r'C:\temp'
s = 'test.xlsx'
sfile = os.path.join(dir, s)
try:
wbS = excel.Workbooks.Open(sfile)
except pythoncom.com_error as error:
print("exception details: {0}".format(error))
exit(1)
Действие не выполняется с:
exception details: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "Microsoft Excel cannot access the file 'C:\\temp\\test.xlsx'. There are several possible reasons:\n\n• The file name or path does not exist.\n• The file is being used by another program.\n• The workbook you are trying to save has the same name as a currently open workbook.", 'xlmain11.chm', 0, -2146827284), None)
Сбой, когда Tomcat запускается либо с правами администратора, либо с локальной учетной записью, причем оба имеют полный доступ к существующему файлу. Убедитесь, что Dispatch, Dispatch и DispatchEX не приводят к успеху. Никакое другое приложение не осуществляет доступ/блокировку файла. Запуск из cmd завершается успешно, что свидетельствует о том, что что-то потеряно на уровне CGI.
(Использование COM позволяет копировать рабочие листы между рабочими книгами и выполнять другие действия, не поддерживаемые XLSWriter и др.)