如何以编程方式连接Excel电子表格?

时间:2008-10-25 19:45:12

标签: excel interface

我从使用Excel as a database的组织请求某些合同工作,并希望通过真实数据库对Excel数据进行一些工作。 (是的,我知道,不要介意......)

客户有一张Excel表,他们在内部使用这些表来跟踪某些政府计划。此Excel工作表中的数据曾经通过CSV作为中间格式手动导入SQL数据库,并通过一个小型Web应用程序提供。电子表格或数据库中的更改是手动完成的(由不同的人员完成),并且必须手动保持同步。

新功能的规范包括:

  • 将Excel文件上传到网络应用
  • 通过网络应用程序进行细微更改(当然,这一点很简单)
  • 偶尔将数据导出回Excel

电子表格(实际上,它是工作簿中的几个)实现了与其他机构交互所必需的一些准则,因此在导入之前和之后必须保持结构相同。它包含大量格式化,隐藏列和排序按钮以及不同工作表中单元格之间的大量数据链接。

我不想从头开始重现电子表格以提供导出,也不想在导入之前手动将正确的列提取到CSV中。我正在寻找一种方法来加载Excel,“查询”某些字段,将它们写入数据库,然后从数据库加载数据并仅操作正确单元格的内容。

有没有办法以编程方式与现有电子表格连接,只能读取或更改您需要的位?

6 个答案:

答案 0 :(得分:10)

Excel是'COM Capable Application',因此您可以使用COM访问和操作Excel文档中的数据。你没有说你正在使用什么平台 - 但如果它是.NET那么它真的很容易。有关如何开始使用C#的信息,请参阅http://support.microsoft.com/kb/302084

如果您没有使用.net,那么任何可以与COM组件交互的语言都可以使用。

答案 1 :(得分:4)

VBA使用的相同API可通过外部COM接口使用。有关此主题的quite a few本书。我推荐Steven Roman的O'Reilly one,但你的口味可能会有所不同。

答案 2 :(得分:3)

您没有指定语言,因此如果您与语言无关.Net为您提供了一些非常强大的数据处理类:

打开csv文件:

Imports System.Data.OleDb, 导入Excel = Microsoft.Office.Interop.Excel

    Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DataFolder + "\;Extended Properties='text;HDR=Yes'"

    Dim conn As New System.Data.OleDb.OleDbConnection(ConnectionString)
    conn.Open()

    Dim CommandText As String = CommandText = "select * from [" + CSVFileName + "]"
    If Filter.Length > 0 Then
        CommandText += " WHERE " + Filter
    End If

    Dim daAsset As New OleDbDataAdapter(CommandText, conn)
    Dim dsAsset As New DataSet
    daAsset.Fill(dsAsset, "Asset")

在工作簿中打开工作表是非常相似的 - 您指定了工作表名称,然后可以用整个工作表填充DataSet - 然后您可以访问Tables()。DataSet的Rows()以获取每个行和字段,迭代每一行等。

答案 3 :(得分:2)

我们正在通过Apache POI阅读和操作Excel-Data,这在解码Excel文件时并不完整(即公式单元格不完全支持),但我们的客户对我们非常满意。

POI是一个Java库,所以如果你是一个纯粹的Windows商店,可能还有其他更自然的选择,但正如我所说,我们对POI的体验非常好,人们很高兴。

此外:我相信已经听说过Excel ODBC驱动程序 - 也许这就是你想要/需要的东西? (对不起,我从未与他们合作过)

答案 4 :(得分:1)

您可能对Excel 2007 Collaboration features感兴趣(就像在网上编辑xls一样)。

答案 5 :(得分:1)

另一种方法是编写一个直接与数据库对话的excel函数,并将结果作为数组返回。

如果您认为这种方法可以正常运行,您可以尝试XLLoop - 这样您就可以轻松地在Java,Python,Ruby,Perl,R,Lisp,Erlang中编写excel函数。