(-2147024891, 'Доступ запрещен.', None, None)
Я разрабатываю приложение Django (v 3.2.6) (Python 3.9.1.), которое должно писать в файл Excel с помощью pywin32.com.
На стороне клиента все работает нормально, но когда я запускаю в производство, используя IIS (v 10) на сервере Windows 11, я получаю вышеуказанную ошибку.
У меня есть процедура, которая считывает файл, введенный пользователем, и записывает его в каталог проекта:
if request.method == 'POST':
# Create a form instance and populate it with the file from the request (binding):
form = Name1_uploadForm(request.POST, request.FILES)
if form.is_valid():
# Create variable for uploaded file
uploaded_excel_file = form.cleaned_data['excel_file']
# Write it to BASE_DIR
with open(os.path.join(settings.BASE_DIR, form.cleaned_data['excel_file'].name), 'wb+') as destination:
for chunk in uploaded_excel_file.chunks():
destination.write(chunk)
# Allow the write process to conclude
time.sleep(12)
# Close the file
destination.close()
# Call conversion function
Name1_extraction(os.path.join(settings.BASE_DIR, form.cleaned_data['excel_file'].name))
# redirect to a new URL:
return HttpResponseRedirect(reverse('index') )
else:
form = Name1_uploadForm()
Вызывает другую функцию (ниже), которая должна открыть тот же файл:
def Name1_extraction(uploaded_excel_file):
const = win32.constants
# Need to run CoInitialize to use win32com.client
pythoncom.CoInitialize()
# Open Name1 excel with Win32com
excelFile = win32.gencache.EnsureDispatch('Excel.Application')
Полная ошибка выглядит следующим образом:
введите описание изображения здесь
введите описание изображения здесь введите описание изображения здесь
Ошибка возникает при выполнении следующей строки кода:
excelFile = win32.gencache.EnsureDispatch('Excel.Application')
Пул приложений - IIS AppPool\DefaultAppPool.
DefaultAppPool получил полный доступ к папкам C:\Windows\SysWOW64\config\systemprofile\Desktop и C:\Windows\System32\config\systemprofile\Desktop
При таких действиях я не ожидал увидеть никаких ошибок
Спасибо за любую оказанную помощь.
Microsoft не рекомендует и не поддерживает серверную Automation of Office, и Microsoft настоятельно рекомендует разработчикам искать альтернативы Automation of Office, когда им необходимо разрабатывать серверные решения.
Из-за ограничений в дизайне Office одного лишь изменения конфигурации Office недостаточно для решения всех проблем. Microsoft настоятельно рекомендует некоторые альтернативы, которые не требуют установки Office на стороне сервера и могут выполнять большинство общих задач эффективнее и быстрее, чем Automation.
Большинство задач автоматизации на стороне сервера связаны с созданием или редактированием документов. Office 2007 поддерживает новый формат файлов Open XML, который позволяет разработчикам создавать, редактировать, читать и преобразовывать содержимое файлов на стороне сервера. Это рекомендуемый и поддерживаемый метод обработки изменений файлов Office со стороны службы.
Как использовать Open XML SDK 2.5 для Office, пожалуйста, обратитесь к документации Microsoft:
https://learn.microsoft.com/en-us/office/open-xml/open-xml-sdk
Соображения по автоматизации Office на стороне сервера см. в этом блоге Microsoft:
У меня была похожая проблема: У меня была программа на Python с библиотекой xlwings, и я создал .bat-файл. Когда я запускал его вручную, он работал отлично, но в планировщике Windows 10 я получал ошибку "(-2147024891, 'Доступ запрещен.', None, None)".
Я выполнил автоматическую коррекцию файла Excel, которую можно сделать, перейдя в Excel > File > Info > Verify document.
Моя проблема заключалась в том, что планировщик Windows не принимал комментарии в файле .xlsm. Я удалил все комментарии, после чего планировщик Windows запустился