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

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

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

新function的规格包括:

  • 将Excelfile upload到Web应用程序
  • 通过networking应用程序进行微小的更改(当然,这一点是毫不费力的)
  • 偶尔将数据导出回Excel

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

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

有没有一种编程方式与现有的电子表格接口,只读取或更改您需要的位?

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

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

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

Excel是一个“支持COM的应用程序”,因此您可以使用COM访问和处理Excel文档中的数据。 你不会说你使用的是什么平台 – 但是如果是.NET,那真的很简单。 请参阅http://support.microsoft.com/kb/302084了解如何开始使用C#。

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

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

你不指定一种语言,所以如果你是语言不可知的.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 – 然后可以访问Tables()。DataSet的Rows()以获取每一行和字段,迭代每一行等

您可能对Excel 2007 协作function感兴趣(例如从Web上编辑xls)。

另一种方法是编写一个直接与数据库交谈的excel函数,并以数组的forms返回结果。

如果您认为这种方法可以运行,那么您可以试试XLLoop–这使您可以轻松地在Java,Python,Ruby,Perl,R,Lisp,Erlang中编写excel函数。