2015-04-08 1 views
0

Jusqu'ici, j'ai le code suivant pour forcer un ods à recalculer toutes les valeurs dans la feuille de calcul et l'enregistrer dans plusieurs formats.Libre bureau uno api enregistrer sous xls

Mais je ne trouve pas le filtre pour XLS. Quelqu'un at-il une idée de comment le découvrir?

import uno 
from com.sun.star.beans import PropertyValue 

def _toProperties(**args): 
    props = [] 
    for key in args: 
     prop = PropertyValue() 
     prop.Name = key 
     prop.Value = args[key] 
     props.append(prop) 
    return tuple(props) 

# start first 
# libreoffice --headless --accept="socket,host=0,port=8001,tcpNoDelay=1;urp"  

inputFile = 'file:///home/user/Downloads/in.ods' 
outputFile = 'file:///home/user/Downloads/out.xls' 

# import the OpenOffice component context 
local = uno.getComponentContext() 
# access the UnoUrlResolver service - this will allow to connect to OpenOffice.org program 
resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local) 
# load the context and you are now connected - you can access OpenOffice via its API mechanism 
context = resolver.resolve("uno:socket,host=localhost,port=8001;urp;StarOffice.ServiceManager") 
remoteContext = context.getPropertyValue("DefaultContext") 

# service responsible for the current document called desktop 
desktop = context.createInstanceWithContext("com.sun.star.frame.Desktop", remoteContext) 
document = desktop.getCurrentComponent() 

# load, calculateAll(), save 
document = desktop.loadComponentFromURL(inputFile, "_blank", 0,()) 
document.calculateAll() 

# ods 
# document.storeAsURL(outputFile,()) 

# pds 
#document.storeToURL(outputFile, _toProperties(FilterName="calc_pdf_Export")) 

# csv 
#document.storeToURL(outputFile, _toProperties(FilterName="Text - txt - csv (StarCalc)")) 

# xls 
document.storeToURL(outputFile, _toProperties(FilterName="calc_MS_Excel_40")) 

# xlsx 
#document.storeToURL(outputFile, _toProperties(FilterName="Calc Office Open XML")) 

document.dispose() 

Répondre

2

Utilisez la macro de base suivante pour obtenir une liste de tous les noms de filtres disponibles

' DannyB Tue Oct 28, 2003 9:49 am 
' http://www.oooforum.org/forum/viewtopic.phtml?t=3549 
Sub writer_dumpFilterNames 
    oFF = createUnoService("com.sun.star.document.FilterFactory") 
    oFilterNames = oFF.getElementNames() 

    ' Now print the filter names. 
' For i = LBound(oFilterNames) To UBound(oFilterNames) 
'  Print oFilterNames(i) 
' Next 

    ' Create a Writer doc and save the filter names to it. 
    oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array()) 
    oText = oDoc.getText() 
    oCursor = oText.createTextCursor() 
    oCursor.gotoEnd(False) 

    ' Print the filter names into a Writer document. 
    For i = LBound(oFilterNames) To UBound(oFilterNames) 
     oText.insertString(oCursor, oFilterNames(i), False) 
     oText.insertControlCharacter(oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) 
    Next 
End Sub 

Le code va créer un nouveau document Writer et mettre les noms là-bas (à l'origine imprimé uniquement les noms, ligne 8 -10)

Est-ce que cela vous aide?