0

Apache(mod_wsgi)/ Windows 2008 Serverで実行されているWebアプリケーションでExcelドキュメントを開く際に問題があります(アプリケーションがdjango開発者サーバーで実行されている場合は問題ありません-1スレッド)。

私のコード:

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 OfficeExcelはファイル'C:\ path \ to\file.xlsx'にアクセスできません。いくつかの理由が考えられます。ファイル名前またはパスが存在しません。ファイルは別のプログラムによって使用されています。保存しようとしているワークブックは、現在開いているワークブックと同じ名前です。 "、u'C:\ Program Files(x86)\ Microsoft Office \ Office12 \ \ 1033 \ XLMAIN11.CHM'、0、-2146827284)、なし)

問題がスレッドのどこかに限定されていることは知っていますが、どこにありますか?pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)を使用しています。たぶんサーバーを変更することで問題は解決しますか?

Libs: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

ソリューションは、単純に 1 つのフォルダーを作成し、関連する (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 に答える