win32com と Microsoft Excel を使用して、IIS でいくつかのバッチ操作を実行しようとしています。DCOMでExcelファイルを開き、操作してからpdfとして保存したい。次のコードは、私の開発マシン (64 ビット Windows 7) で問題なく動作します。
# views.py
class ConvertFileView(View):
def get(self,request):
"""Convert the selected file"""
output = "c://docs/somefile.pdf"
input = "c://docs/input.xlsx"
#Open excel and open input.xlsx
excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
excel.DisplayAlerts = False
excel.Visible = False
workbook = excel.Workbooks.Open(input)
# File manipulation here
workbook.ExportAsFixedFormat(Type=0,Filename=output)
excel.Quit()
del excel
return HttpResponse("Done")
ただし、IIS を介して Web ページを読み込むと、次のエラーが発生します。
com_error at /converter/convert/114/
(-2147024891, 'Access is denied.', None, None)
Traceback:
C:\GoogleDrive\websites\...\python\apps\converter\views.py in get
141. excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
C:\python27\lib\site-packages\win32com\client\__init__.py in Dispatch
95. dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
C:\python27\lib\site-packages\win32com\client\dynamic.py in _GetGoodDispatchAndUserName
114. return (_GetGoodDispatch(IDispatch, clsctx),
C:\python27\lib\site-packages\win32com\client\dynamic.py in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
これは私の開発マシンでうまく機能します。このエラーは、Windows Server 2008 で IIS を介して Web ページを読み込んだときに発生します。Python には、IIS で Excel を起動するための適切な権限がないと想定しています。とにかく、Excel を実行するための python/DCOM 権限を与えることができますか?