4

我有一个使用Excel 作为数据库并希望通过真实数据库对 Excel 数据进行一些工作的组织请求一些合同工作。(是的,我知道,没关系……)

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

新功能的规范包括:

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

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

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

有没有办法以编程方式与现有电子表格进行交互,并且只读取或更改您需要的位?

4

6 回答 6

10

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

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

于 2008-10-25T20:05:50.390 回答
4

VBA 使用的相同 API 可通过外部 COM 接口使用。有很多关于这个主题的书。我推荐Steven Roman的O'Reilly ,但您的口味可能会有所不同。

于 2008-10-25T20:54:39.420 回答
3

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

打开 csv 文件:

导入 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 - 然后您可以访问 DataSet 的 Tables().Rows() 以获取每一行和字段,迭代每行等

于 2008-10-29T20:07:53.350 回答
2

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

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

另外:我相信听说过 Excel ODBC 驱动程序 - 也许这就是您想要/需要的?(对不起,我从来没有和他们合作过)

于 2008-10-25T20:17:10.010 回答
1

您可能对 Excel 2007协作功能(如从网络编辑 xls)感兴趣。

于 2008-10-25T19:59:03.853 回答
1

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

如果您认为这种方法效果很好,您可以尝试XLLoop - 这使您可以轻松地用 Java、Python、Ruby、Perl、R、Lisp、Erlang 编写 excel 函数。

于 2009-05-08T19:13:08.713 回答