win32com + Excel + Django + Apache = 问题

问题描述 投票:0回答:3

我在 Web 应用程序中打开 Excel 文档时遇到一些问题 在 Apache(mod_wsgi)/Windows 2008 Server 下运行(没有 应用程序在 Django 开发人员服务器上运行时出现问题 - 一个线程)。

我的代码:

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, u'Microsoft Office Excel', u"Microsoft Office Excel 无法访问文件 'C:\path o ile.xlsx'。有几种可能的原因: 文件名或路径 不存在。该文件正在被另一个程序使用。这 您尝试保存的工作簿与当前打开的工作簿同名 工作簿。”,u'C:\Program Files (x86)\Microsoft Office\Office12\ C3\XLMAIN11.CHM', 0, -2146827284), 无)

我知道问题出在线程的某个地方,但是在哪里? 我正在使用 pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)。 也许换个服务器就能解决问题?

库:Django 1.2、Apache 2.2 (mod_wsgi)、win32com(最新)

我希望有人能帮助我。

谢谢你, 问候

python multithreading apache excel win32com
3个回答
3
投票

经过数小时研究完全相同的问题后,我找到了解决方案。它与 pythoncom / win32com 无关,但与 apache 作为服务运行的事实有关。 可以在这里找到解决方案:

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

解决方案包括简单地创建一个文件夹并赋予相关(apache)用户写权限:

64 位 Windows - 创建此文件夹:

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

32 位 Windows - 创建此文件夹:

C:\Windows\System32\config\systemprofile\Desktop

0
投票

我建议使用 xlrd 模块从(线程)django 项目中读取 Excel 文件,因为 Office 本身对于不在主/GUI 线程中很挑剔。


0
投票

ichorev 的解决方案对我不起作用。

但是我已经将 application-group=%{GLOBAL} 添加到解决了问题的 WSGIScriptAlias 中。

基于这个解决方案不能在/之外的其他地方托管我的wsgi应用程序

像这样:

WSGIScriptAlias / "C:/Users/myuser/Documents/Platform/test-temp/test js playground/webproject/webproject/wsgi.py" application-group=%{GLOBAL}
© www.soinside.com 2019 - 2024. All rights reserved.