6

In a program that creates an excel file, i wonder if i could give the chance to the users that don't have MS Office to create an .xls file with only LibreOffice installed. What should i use instead of "using Excel = Microsoft.office.interlope.excel;" and the rest of the commands ? TnX!

Matt Ellen
  • 11,268
  • 4
  • 68
  • 90
Christos Karapapas
  • 1,018
  • 3
  • 19
  • 40

2 Answers2

4

LibreOffice uses the ODF (Open Document Format). ODF is not a hard format to grasp because all it basically is is a collection of XML files that are zipped into one file, called an ODF file. You can read here on how to read and save ODF files. Also, you can check here for a real example in C#

Icemanind
  • 47,519
  • 50
  • 171
  • 296
  • so is it generally easier to manipulate an .ods file, and just have a "convert .ods to .xls" button in your application in case some user needs it in .xls ? – Christos Karapapas Jul 12 '11 at 15:41
  • @chris - yes, whatever is easier. I believe Excel 2007 and Excel 2010 can read open document files, but I'm not sure. – Icemanind Jul 12 '11 at 16:00
0

If you had installed LibreOffice look for cli_basetypes.dll, cli_cppuhelper.dll, cli_oootypes.dll, cli_uno.dll, cli_ure.dll, cli_uretypes.dll then add references to your project, it must work for you, i also installed "Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats" and "Microsoft Access Database Engine 2010 Redistributable" (to get ACE.OLEDB.12.O connection without complete Office installation). This is a part of VB Sample in which i got connection to oledb to create some queries.

    OpenFileDialog.Filter = "Spreadsheets (*.xls*)|*.xls*"
    OpenFileDialog.Multiselect = False
    Try
        If (OpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then
            objOffice = CreateObject("com.sun.star.ServiceManager") 'preparar instancia libreOffice (prepare libreOffice instance)
            instOffice = objOffice.createInstance("com.sun.star.frame.Desktop")
            Dim obj(-1) As Object
            Dim myDoc = instOffice.loadComponentFromURL("file:///" & OpenFileDialog.FileName.Replace("\", "/"), "_default", 0, obj)
            Dim hojas = myDoc.getSheets().getElementNames() 'Obtener nombres de las hojas de calculo (get Spreadsheet names)
            System.Threading.Thread.Sleep(1000) 'Esperar a que termine la instancia Office (await libreOffice thread)
            myDoc.Close(True)

            Dim MyConnection As System.Data.OleDb.OleDbConnection 'Preparar conexión para realizar consulta tipo sql (preparing connection)
            Dim DtSet As System.Data.DataSet
            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter

            If OpenFileDialog.FileName.ToUpper.Contains(".XLSX") Then
                MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & OpenFileDialog.FileName & "';Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'")
            Else
                MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & OpenFileDialog.FileName & "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'")
            End If
Raziel
  • 11
  • 1