(-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:

https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2

У меня была похожая проблема: У меня была программа на Python с библиотекой xlwings, и я создал .bat-файл. Когда я запускал его вручную, он работал отлично, но в планировщике Windows 10 я получал ошибку "(-2147024891, 'Доступ запрещен.', None, None)".

Я выполнил автоматическую коррекцию файла Excel, которую можно сделать, перейдя в Excel > File > Info > Verify document.

Моя проблема заключалась в том, что планировщик Windows не принимал комментарии в файле .xlsm. Я удалил все комментарии, после чего планировщик Windows запустился

Вернуться на верх