2011-01-26 111 views
0

我有一些问题,在Web应用程序 打开Excel文件的Apache(mod_wsgi的)/ Windows下运行的2008服务器(也就是当应用程序的Django开发服务器上运行,没有 问题 - 单线程)。win32com +的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 \到 \ file.xlsx'。有几种可能的原因:文件名或路径 不存在。该文件正在被其他程序使用。您试图保存的 工作簿具有与当前打开的 工作簿同名。“,u'C:\ Progra m文件(x86)\微软Office \ Office12 \ \ 1033 \ XLMAIN11.CHM',0,-2146827284),无)

我知道问题是本地化的线程,但在哪里? 我使用的是pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)。 也许更改服务器将解决问题?

利布斯:Django的1.2,Apache 2.2的(mod_wsgi的),win32com(最新)

我希望有人能帮助我。

谢谢, 尊敬。

回答

0

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

+0

不幸的是我不能。我必须管理许多宏并执行其他重要的Excel操作。 – meme 2011-01-26 13:09:42

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