6

我有一个 MS-Access 应用程序,它在两个大型电子表格(20,000 多行)中格式化数据,将这些数据导入表格,运行一些查询比较数据并将结果输出为 excel 文件。

问题是随着应用程序(和 VBA 代码)的增长,使用 Access 变得越来越痛苦,我想知道是否有更好的方法?

与 MS-Access 相比,.NET(C#) 解决方案的优点/缺点是什么,最好的库等是什么?

干杯,

布兰丹

为到目前为止的响应干杯,我忘了提到虽然这个应用程序需要独立,我需要能够打包应用程序并将其发送给最终用户以安装在他们的计算机上。这只安装了(值得注意的)MS-Office 和 .Net Framework,所以我不确定 MySQL 等在没有地方托管的情况下有多可行。

4

8 回答 8

5

迁移到 .Net 将使您拥有更好的工具来处理数据。

尽管您现在使用 Access 解决方案到底在做什么,但您必须小心:如果您正在做很多特殊情况处理来处理与 Excel 之间的数据,那么您可能仍然需要做您选择的任何语言或框架的那些。

如果您投入大量代码将 Excel 数据提取到 Access 中,那么您仍然可以保留该部分的 Access 并使用 .Net 帮助您进行比较和创建生成的 Excel 报告。

在不了解您的项目的情况下真正提出建议有点困难。

如果您只想使用自动化来提取数据并创建您的 Excel 文件,那么 .Net 可能不会为您提供很多,因为您仍然需要执行您已经在 Access 中完成的完全相同的事情。

相反,您可以考虑使用使用不同范例的商业 Excel 组件以更好的方式打开/创建 Excel 电子表格。
有一些组件供应商拥有这些。

一种解决方案是使用报告工具直接从 Excel 中提取数据并生成一份您可以简单地保存回 Excel 的报告。

我的建议是:

  • 如果您的 Access 解决方案稳定且工作正常,那么您可以考虑保留它。
    迁移到新系统将花费您时间和金钱,您必须检查结果是否值得投资。
  • 如果您觉得 Access 的功能过于受限,那么请花一些时间尝试各种允许您操作 Excel 的解决方案和组件,例如使用 LINQ Excel 提供程序(12)可能会提供很好的抽象,或者尝试各种商业组件,直到找到符合您需求的组件。

如果您采用 .Net 路线,您可能最终甚至不需要数据库来处理数据。
但是,如果您这样做,您始终可以使用 Jet(或其新版本 ACE)作为创建 MSAccess 数据库的后端。
它已经安装在大多数机器上,并且得到 MS 工具的良好支持。
其他不错的选择是 SQL Server Compact 和 SQLite,因为这些都不需要复杂的设置,只需一个 DLL 即可随您的项目一起提供。

于 2009-02-15T09:04:29.633 回答
2

我想说,对于您正在使用的 20,000 行的数据量,SQL Server 数据库除了迁移到存储过程来进行数据操作之外并不会真正为您带来太多好处。在这方面,它可以说比 VBA 更好,因此您可能会得到一个更易于维护的代码库。但是,按照数据库标准,您描述的数据量很小。除非您拥有比这多一两个数量级的数据,否则我不会期望性能成为问题。

如果您想做数据处理工作,最好使用PerlPython之类的脚本语言。这些语言比 C# 或 VB.Net 更适合数据操作任务。可以在www.activestate.com找到 Perl 和 Python 的良好、免费的 Windows 发行版。

Excel 可以通过python-com接口使用与 VBA 相同的 API 使用 Python 编写脚本,但可以获得更好的语言,并提供大量可用的库。同样,这也可以通过Win32::OLE使用 Perl 来完成。还有一些实用程序库,例如pyexceleratorxlrdxlwt,用于 Python 和Spreadsheet::WriteExcel/Spreadsheet::ParseExcel用于 Perl。还有一些模块可用于构建可安装的 Windows 应用程序,例如Py2EXEPerl Dev Kit

这篇 Stackoverflow 帖子更深入地讨论了在 Python 中使用 Excel,包括使用 MakePy 生成包装器。

如果您正在使用 .Net,您也可以尝试IronPython——它是 Python 的本地 .Net 实现,可以在安装了合适的 .Net 运行时的任何地方运行。您还可以获得一个名为IronPythonStudio的免费 Visual Studio 插件)。

另一种选择是R。R 主要是一个统计包,但核心语言具有强大的数据处理能力和各种接口库(以及其他如图形、各种统计计算和Excel 接口。它实际上是一个非常强大的通用数据处理和报告工具.

于 2009-02-14T23:34:05.490 回答
2

SpreadsheetGear,我们的专长是与 Excel 兼容的高性能电子表格组件。我们一直听到(请参阅此页面上的一些客户报价),SpreadsheetGear for .NET 比其他选项更快且更易于使用。

有C# 和 VB.NET 源代码的实时 ASP.NET 示例,如果您想亲自尝试,可以免费试用。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-02-15T17:58:43.857 回答
1

Apache POI 库可能对您有用。它是基于java的,可以处理excel文件。

另一种选择可能是使用直接 ODBC 驱动程序来处理 XLS 文件。不过可能有很多记录..

http://poi.apache.org/

POI 项目由 API 组成,用于操作基于 Microsoft 的 OLE 2 复合文档格式和 Office OpenXML 格式的各种文件格式,使用纯 Java。简而言之,您可以使用 Java 读写 MS Excel 文件。此外,您可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。POI 是您的 Java Excel 解决方案(适用于 Excel 97-2007)。但是,我们有一个完整的 API 用于移植其他 OLE 2 复合文档格式并欢迎其他人参与。

基于 OLE 2 复合文档格式的文件包括大多数 Microsoft Office 文件,例如 XLS 和 DOC 以及基于 MFC 序列化 API 的文件格式。

基于 Office OpenXML 格式的文件包括新的 (2007+) 基于 xml 的文件格式,包括 Microsoft Office 文件,例如 XLSX、DOCX 和 PPTX。

编辑:查看Monarch Pro之类的工具,它在数据挖掘等方面非常出色。

于 2009-02-14T20:54:10.180 回答
1

SpreadsheetGear完全震撼!您可以两全其美,电子表格中的所有逻辑都可供您从代码中执行。您可以真正缩短开发时间,因为您可以让业务部门帮助制定业务流程的逻辑。

于 2009-02-15T18:20:59.000 回答
0

我会考虑一个使用 SQL Server Compact 开始的系统。如果你愿意,你可以不安装就使用它(虽然我建议你这样做,假设必要的 dll 在 GAC 中要容易得多)。如果随后您发现需要更多功能(例如存储过程或 TEXT/BLOB 列,诸如此类),那么迁移到 SQL Server 将是微不足道的。

如果您的数据库每次都重新生成,那么尝试不同的事情就像指向不同的文件一样简单。

如果您在 VBA 中有相当多的代码,我建议您首先将其移至 VB.Net(使此,首先也是最容易出错的转换更容易),然后如果您愿意,则将其迁移到 c#。

至于生成/更改 excel 表,您有三个选项。

一种是使用VSTO,尽管Wikipedia是一个更好的描述。这将最接近您的旧 VBA 开发,尽管它具有完全不同的复杂性。

另一种是使用其中一个 excel 输出库,还有一些商业的。我个人不能推荐任何人,尽管其他人在这里有

最后就是转储 csv 并在打开时让 excel 处理它。

于 2009-02-14T22:48:23.977 回答
0

在我看来,Access 并没有帮助你作为中介。20K 行对我来说听起来并不多。您说您从 Excel 转到 Access,然后再返回 Excel。您是否需要保留 Access 数据?

如果没有,我建议使用 .Net 和FlexCel等第三方 Excel 库,并直接从 Excel 转到内存中的 Excel。使用安装程序或ClickOnce可以轻松打包 .Net 应用程序。

于 2009-02-15T14:09:47.760 回答
-2

我想知道你是否已经超越了 Access。这就是更强大的数据库(如 SQL Server)的诞生目的。20,000 行对于 SQL Server 来说并不是一个很大的数字,但我敢打赌,对于 Access,它已经到达那里。Access 在运行时占用了多少磁盘空间?数据增长的速度有多快?

您对 C# 与 VB 的了解程度如何?如果您不太了解 C#,这可能是一个学习的好机会。这是一个你已经很清楚的问题。

于 2009-02-14T21:05:36.783 回答