1

Python 2.7 win32com モジュールを使用して、OpenOffice で既存の .xls ドキュメントを開こうとしています。次のスクリプトは、インタープリターを介して完全に実行されます。

from win32com import client
import time
import string

def pathnameToUrl( cPathname):
    """Convert a Windows or Linux pathname into an OOo URL."""
    if len( cPathname ) > 1:
        if cPathname[1:2] == ":":
            cPathname = "/" + cPathname[0] + "|" + cPathname[2:]
    cPathname = string.replace( cPathname, "\\", "/" )
    cPathname = "file://" + cPathname
    return cPathname

def PropertyValueArray(num):
    '''Creates an openoffice property value array'''
    l = []
    for x in range(num):
        _p = manager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        _p.Name = ''
        _p.Value = ''
        l.append(_p)
    return l

wbcpath = r"C:\myexcelfile.xls"
manager = client.DispatchEx("com.sun.star.ServiceManager")
desktop = manager.CreateInstance("com.sun.star.frame.Desktop")
manager._FlagAsMethod("Bridge_GetStruct")
manager._FlagAsMethod("Bridge_GetValueObject")
p = PropertyValueArray(1)
p[0].Name = 'Hidden'  # doc should run hidden
p[0].Value = True  # doc should run hidden
doc = desktop.loadComponentFromURL(pathnameToUrl(wbcpath), "_blank", 0, p)
doc.store()
time.sleep(5)
doc.dispose()

Windows Server Standard 2007 SP2 の Windows タスク スケジューラでこれをスケジュールしようとすると、次のエラーが発生します。

Traceback (most recent call last):
  File "D:\report_polygon_count.py", line 216, in <module>
    manager = client.DispatchEx("com.sun.star.ServiceManager")
  File "C:\Python27\ArcGIS10.1\lib\site-packages\win32com\client\__init__.py", line 113, in DispatchEx
    dispatch = pythoncom.CoCreateInstanceEx(clsid, None, clsctx, serverInfo, (pythoncom.IID_IDispatch,))[0]
com_error: (-2146959355, 'Server execution failed', None, None)

問題は、アプリケーションがウィンドウを開こうとしているのに、ログインしているユーザーがいないために拒否され始めたことだと確信しています。この問題を回避するために、非表示で実行しようとしました。これを回避する方法はありますか、それとも野心的すぎますか?

4

0 に答える 0