2010-01-28 12 views
6

का उपयोग कर ओपनऑफिस पर एक दस्तावेज़ लोड करना मैं ओपनऑफिस कैल्क शीट पर कुछ बदलाव करने के लिए एक पायथन प्रोग्राम (पायुनो का उपयोग करके) बनाने की कोशिश कर रहा हूं।बाहरी पायथन प्रोग्राम

मैंने बाहरी प्रोग्राम से कनेक्ट करने में सक्षम होने के लिए पहले "ओपनऑफिस" ओपनऑफिस लॉन्च किया है। जाहिर है, के रूप में के रूप में आसान होना चाहिए:

import uno 
# get the uno component context from the PyUNO runtime 
localContext = uno.getComponentContext() 

# create the UnoUrlResolver 
resolver = localContext.ServiceManager.createInstanceWithContext(
          "com.sun.star.bridge.UnoUrlResolver", localContext) 

# connect to the running office 
ctx = resolver.resolve("uno:socket,host=localhost,port=2002;" 
         "urp;StarOffice.ComponentContext") 
smgr = ctx.ServiceManager 

# get the central desktop object 
DESKTOP =smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) 

#The calling it's not exactly this way, just to simplify the code 
DESKTOP.loadComponentFromURL('file.ods') 

लेकिन मैं एक AttributeError मिलता है जब मैं loadComponentFromURL तक पहुँचने का प्रयास। अगर मैं एक dir(DESKTOP) बनाने के लिए, मैं केवल निम्न विशेषताओं/तरीकों को देखने के कर दिया है:

['ActiveFrame', 'DispatchRecorderSupplier', 'ImplementationId', 'ImplementationName', 
'IsPlugged', 'PropertySetInfo', 'SupportedServiceNames', 'SuspendQuickstartVeto', 
'Title', 'Types', 'addEventListener', 'addPropertyChangeListener', 
'addVetoableChangeListener', 'dispose', 'disposing', 'getImplementationId', 
'getImplementationName', 'getPropertySetInfo', 'getPropertyValue', 
'getSupportedServiceNames', 'getTypes', 'handle', 'queryInterface', 
'removeEventListener', 'removePropertyChangeListener', 'removeVetoableChangeListener', 
'setPropertyValue', 'supportsService'] 

मैं कहाँ एक बग एक ही कर देखते हैं कि पढ़ा है, लेकिन OpenOffice 3.0 पर (मैं OpenOffice 3.1 से अधिक उपयोग कर रहा हूँ लाल Hat5.3)। मैंने here बताए गए वर्कअराउंड का उपयोग करने की कोशिश की है, लेकिन ऐसा लगता है कि वे काम नहीं कर रहे हैं।

कोई विचार?

उत्तर

4

यह एक लंबे समय के बाद से मैं PyUNO के साथ कुछ भी किया है, लेकिन कोड है कि पिछली बार जब मैं इसे 06 में वापस भाग गया काम पर देख रहे हैं, मैंने किया था इस तरह मेरी लोड दस्तावेज़:

def urlify(path): 
    return uno.systemPathToFileUrl(os.path.realpath(path)) 

desktop.loadComponentFromURL(
     urlify(tempfilename), "_blank", 0,()) 

आपका उदाहरण एक सरलीकृत संस्करण है, और मुझे यकीन नहीं है कि आपने जानबूझकर या जानबूझकर अतिरिक्त तर्क हटा दिए हैं।

यदि loadComponentFromURL नहीं है, तो एपीआई बदल गई है या कुछ और गलत है, मैंने आपके कोड को पढ़ लिया है और ऐसा लगता है कि आप मेरे पास वही काम कर रहे हैं।

मुझे विश्वास नहीं है कि डेस्कटॉप ऑब्जेक्ट पर विधियों का dir() उपयोगी होगा, क्योंकि मुझे लगता है कि अनुरोधों के माध्यम से प्रॉक्सी करने के लिए __getattr__ विधि का उपयोग किया जा रहा है, और आपके द्वारा मुद्रित सभी विधियां हैं com.sun.star.frame.Desktop के लिए स्टैंड-इन ऑब्जेक्ट के लिए उपयोग की जाने वाली उपयोगिता विधियां।

मुझे लगता है कि शायद विफलता यह हो सकती है कि loadComponentFromURL नामक कोई विधि नहीं है जिसमें बिल्कुल 1 तर्क है। शायद 4 तर्क संस्करण देने के परिणामस्वरूप विधि मिल और उपयोग की जाएगी। यह पाइथन और जावा के बीच एक प्रतिबाधा विसंगति हो सकता है, जहां जावा में कॉल-हस्ताक्षर विधि ओवरलोडिंग है।

+0

विधि नहीं, पाया जाता है के रूप में मैं विधि itsef प्राप्त करने की कोशिश कर रहा है, इंटरैक्टिव खोल से पैरामीटर के बिना बुला: - (मैंने इसे चार पैरामीटर के साथ कॉल करने का भी प्रयास किया है, मैंने इसे जानबूझकर सरल बना दिया है। – Khelben

संबंधित मुद्दे