Jusqu’à présent, j’ai trouvé quelques sources qui traitent de la création de fichiers ODS: Comment créer des documents ODS en .Net et Comment créer des fichiers .odt avec C # .NET?
Et le plus intéressant, une explication pour l’ouverture de fichiers calc . Cependant, OpenOffice est ouvert en plein écran. Ce que je cherche, c’est un moyen d’écrire dans un fichier Calc (.ods) sans ouvrir Openoffice. Pour que je puisse écrire une fonction qui ouvre simplement un fichier savefiledialog, obtient le nom du fichier, puis crée et enregistre le fichier .ods.
Y at-il des exemples de code C # disponibles pour faire une telle chose?
Donc, j’ai finalement résolu ce problème et je veux sauver aux autres le noisetier de le subir à nouveau. Les points fondamentaux de HEADACE pour moi étaient:
C:/
pas C:\
) Filtername
utilisé doit être défini sur le moteur utilisé pour enregistrer le document. Les valeurs possibles incluent writer8
, calc8
, MS Excel 97
Vous devez donc évidemment utiliser calc8 pour les feuilles de calcul . PropertyValue
et définissez Hidden
sur true
. Bon codage et n’oubliez pas d’installer le SDK OpenOffice pour pouvoir append les références unoidl:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using unoidl.com.sun.star.uno; using unoidl.com.sun.star.lang; using unoidl.com.sun.star.frame; using unoidl.com.sun.star.beans; using unoidl.com.sun.star.sheet; using unoidl.com.sun.star.container; using unoidl.com.sun.star.table; using unoidl.com.sun.star.text; namespace TimeScanner { class ReportGenerator { private const ssortingng fileName = @"file:///C:/Documents and Settings/My Documents/Hours Report.ods"; //Concrete Methods internal XComponent openCalcSheet() { XComponentContext oStrap = uno.util.Bootstrap.bootstrap(); XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager(); XComponentLoader desktop = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop"); ssortingng url = @"private:factory/scalc"; PropertyValue[] loadProps = new PropertyValue[1]; loadProps[0] = new PropertyValue(); loadProps[0].Name = "Hidden"; loadProps[0].Value = new uno.Any(true); //PropertyValue[] loadProps = new PropertyValue[0]; XComponent document = desktop.loadComponentFromURL(url, "_blank", 0, loadProps); return document; } public void writeToSheet(XComponent document) { XSpreadsheets oSheets = ((XSpreadsheetDocument)document).getSheets(); XIndexAccess oSheetsIA = (XIndexAccess) oSheets; XSpreadsheet sheet = (XSpreadsheet) oSheetsIA.getByIndex(0).Value; XCell cell = sheet.getCellByPosition( 0, 0 ); //A1 ((XText)cell).setSsortingng("Cost"); cell = sheet.getCellByPosition( 1, 0 ); //B1 cell.setValue(200); cell = sheet.getCellByPosition( 1, 2 ); //B3 cell.setFormula("=B1 * 1.175"); } public void saveCalcSheet(XComponent oDoc) { PropertyValue[] propVals = new PropertyValue[1]; propVals[0] = new PropertyValue(); propVals[0].Name = "FilterName"; propVals[0].Value = new uno.Any("calc8"); ((XStorable)oDoc).storeToURL(fileName, propVals); } } }