有没有办法像使用 C# 的 MS Office Excel 一样创建/读取 LibreOffice 电子表格?

Posted

技术标签:

【中文标题】有没有办法像使用 C# 的 MS Office Excel 一样创建/读取 LibreOffice 电子表格?【英文标题】:Is there a way to create/read a LibreOffice Spreadsheet just like MS Office Excel with C#? 【发布时间】:2011-07-12 14:57:16 【问题描述】:

在一个创建 excel 文件的程序中,我想知道我是否可以让没有 MS Office 的用户有机会创建一个仅安装了 LibreOffice 的 .xls 文件。我应该使用什么而不是“使用 Excel = Microsoft.office.interlope.excel;”和其余的命令?天呐!

【问题讨论】:

【参考方案1】:

LibreOffice 使用 ODF(开放文档格式)。 ODF 不是一种难以掌握的格式,因为它基本上是一组 XML 文件,这些文件被压缩到一个文件中,称为 ODF 文件。您可以read here 了解如何读取和保存 ODF 文件。也可以check here for a real example in C#

【讨论】:

那么操作 .ods 文件通常更容易吗?只需在应用程序中添加一个“将 .ods 转换为 .xls”按钮,以防某些用户在 .xls 中需要它? @chris - 是的,不管怎样更容易。我相信 Excel 2007 和 Excel 2010 可以读取打开的文档文件,但我不确定。【参考方案2】:

如果您安装了 LibreOffice,请查找 cli_basetypes.dll、cli_cppuhelper.dll、cli_oootypes.dll、cli_uno.dll、cli_ure.dll、cli_uretypes.dll,然后添加对您项目的引用,它必须对您有用,我也安装了“适用于 Word、Excel 和 PowerPoint 文件格式的 Microsoft Office 兼容包”和“Microsoft Access Database Engine 2010 Redistributable”(无需完成 Office 安装即可获得 ACE.OLEDB.12.O 连接)。这是 VB Sample 的一部分,我在其中连接到 oledb 以创建一些查询。

    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

【讨论】:

以上是关于有没有办法像使用 C# 的 MS Office Excel 一样创建/读取 LibreOffice 电子表格?的主要内容,如果未能解决你的问题,请参考以下文章

外部表不是预期的格式。未安装 MS Office。使用 C# 创建 xlsx 文件

用 C# 对 MS office 进行编程 - 有可能吗?

如何在互操作期间阻止 MS Graph 组件弹出?

MS Access“数字”类型对应于哪种 C# 数据类型?

在没有为 Wpf 产品安装 MS Office 的情况下导出到 Excel

有没有办法像在 javascript 中一样在 C# 中交替使用单引号和双引号?