win32com + Excel + Django + Apache =问题

yrdbyhpb  于 2023-03-19  发布在  Apache
关注(0)|答案(3)|浏览(218)

我在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,“发生异常。”,(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_MULTITHHEADED)。也许改变服务器会解决这个问题?
库:Django 1.2,Apache 2.2(mod_wsgi),win32 com(最新版本)
我希望有人能帮助我。
谢谢你,问候。

aij0ehis

aij0ehis1#

经过几个小时的研究,我找到了解决方案。这与pythoncom /win32 com无关,而是因为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
rhfm7lfc

rhfm7lfc2#

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

niwlg2el

niwlg2el3#

ichorev的解决方案对我不起作用。
但是我已经将应用程序组=%{GLOBAL}添加到WSGIScriptAlias中,从而解决了这个问题。
基于此解决方案Can't host my wsgi application on other places than /
就像这样:

WSGIScriptAlias / "C:/Users/myuser/Documents/Platform/test-temp/test js playground/webproject/webproject/wsgi.py" application-group=%{GLOBAL}

相关问题