win32com + Excel + Django + Apache = проблема - PullRequest
0 голосов
/ 26 января 2011

У меня есть некоторые проблемы с открытием документа Excel в веб-приложении, работающем под Apache (mod_wsgi) / Windows 2008 Server (нет проблем, когда приложение работает на сервере разработчика django - один поток).

Myкод:

def my_view(request):
   import pythoncom
   from win32com.client import DispatchEx

   pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
   xl = win32com.client.dynamic.Dispatch('Excel.Application')
   xl.DisplayAlerts = False
   xl.Visible = 0
   doc = xl.Workbooks.Open("C:\\path\\to\\file.xlsx")
   doc.Saved = True
   ...
   wb.Close(SaveChanges=0)
   xl.Quit()
   pythoncom.CoUninitialize()

Сообщение об ошибке:

(- 2147352567, «Произошло исключение.», (0, «Microsoft Office Excel», «Microsoft Office Excel не может получить доступ к файлу»)C: \ path \ to \ file.xlsx '. Существует несколько возможных причин: имя файла или путь не существует. Файл используется другой программой. Книга, которую вы пытаетесь сохранить, имеет то же имя, что и текущая.открыть книгу. ", u'C: \ Program Files (x86) \ Microsoft Office \ Office12 \ \ 1033 \ XLMAIN11.CHM ', 0, -2146827284), Нет)

Я знаю, что где-то локализована проблемав потоке, но где?Я использую pythoncom.CoInitializeEx (pythoncom.COINIT_MULTITHREADED).Может быть, смена сервера решит проблему?

Libs: Django 1.2, Apache 2.2 (mod_wsgi), win32com (последняя версия)

Надеюсь, кто-нибудь сможет мне помочь.

СпасибоВы, привет.

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

После нескольких часов исследования точно такой же проблемы я нашел решение.Это не имеет ничего общего с pythoncom / win32com, но с тем фактом, что apache работает как сервис.Решение можно найти здесь:

http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef91

Решение состоит в простом создании одной папки и предоставлении ей прав на запись от соответствующего (apache) пользователя:

64-bit windows - создать эту папку:

C:\Windows\SysWOW64\config\systemprofile\Desktop

32-bit windows - создать эту папку:

C:\Windows\System32\config\systemprofile\Desktop
0 голосов
/ 26 января 2011

Я бы порекомендовал использовать модуль xlrd для чтения файлов Excel из (многопоточного) проекта django, так как сам Office привередлив в том, что его нет в основном потоке / GUI-потоке.

...