我在 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(最新)
我希望有人能帮助我。
谢谢你, 问候
经过数小时研究完全相同的问题后,我找到了解决方案。它与 pythoncom / win32com 无关,但与 apache 作为服务运行的事实有关。 可以在这里找到解决方案:
解决方案包括简单地创建一个文件夹并赋予相关(apache)用户写权限:
64 位 Windows - 创建此文件夹:
C:\Windows\SysWOW64\config\systemprofile\Desktop
32 位 Windows - 创建此文件夹:
C:\Windows\System32\config\systemprofile\Desktop
我建议使用 xlrd 模块从(线程)django 项目中读取 Excel 文件,因为 Office 本身对于不在主/GUI 线程中很挑剔。
ichorev 的解决方案对我不起作用。
但是我已经将 application-group=%{GLOBAL} 添加到解决了问题的 WSGIScriptAlias 中。
基于这个解决方案不能在/之外的其他地方托管我的wsgi应用程序
像这样:
WSGIScriptAlias / "C:/Users/myuser/Documents/Platform/test-temp/test js playground/webproject/webproject/wsgi.py" application-group=%{GLOBAL}