2011-01-26 114 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