0

我在 Apache(mod_wsgi)/Windows 2008 Server 下运行的 Web 应用程序中打开 Excel 文档时遇到了一些问题(当应用程序在 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, 'Exception occurred.', (0, u'Microsoft Office Excel', u"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)。也许更换服务器会解决问题?

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

我希望有人能帮助我。

谢谢,问候。

4

2 回答 2

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
于 2011-09-04T15:04:34.300 回答
0

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

于 2011-01-26T12:56:48.527 回答