【问题标题】:Alternative to MS-Access/Excel for Spreadsheet Manipulation用于电子表格操作的 MS-Access/Excel 替代方案
【发布时间】:2009-02-14 20:52:36
【问题描述】:

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

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

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

干杯,

布伦丹

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

【问题讨论】:

  • 您在使用 Access 时遇到的痛苦是什么?是执行速度吗?是把数据导入Access,然后操作,然后输出Excel文件吗?
  • 这主要是糟糕的 VBA IDE、糟糕的异常处理、日志记录选项和代码更改跟踪。与我之前使用的(java/eclipse、c#/VS)相比,这感觉像是退了一步。目前,该应用程序很稳定,但可能会在未来几个月内扩展,所以我现在正在寻求改变。

标签: c# .net excel ms-access spreadsheet


【解决方案1】:

迁移到 .Net 可以让您拥有更好的工具来处理数据。

您必须小心您目前正在使用 Access 解决方案执行的操作:如果您正在执行大量特殊情况处理来处理与 Excel 之间的数据,那么您可能仍然会必须使用您选择的任何语言或框架来执行这些操作。

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

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

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

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

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

我的建议是:

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

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

【讨论】:

    【解决方案2】:

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

    有 C# 和 VB.NET 源代码的 live ASP.NET samples 和一个 free trial 如果你想自己尝试的话。

    免责声明:我拥有 SpreadsheetGear LLC

    【讨论】:

      【解决方案3】:

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

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

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

      This Stackoverflow posting 更深入地讨论了在 Python 中使用 Excel,包括使用 MakePy 生成包装器。

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

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

      【讨论】:

        【解决方案4】:

        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之类的工具,它在数据挖掘等方面非常出色。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

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

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

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

            另一个是使用其中一个 excel 输出库,有一个 few 以及更多的商业库。尽管other's here have,我个人无法推荐任何人。

            最后就是把csv转储出来,打开的时候让excel处理。

            【讨论】:

            • 又一个没有阅读理解能力的人。问题是代码,而不是数据管理。
            • FFS - 我的大部分帖子都致力于代码,或者您是否懒得阅读过去的 SQL Server compact 以使代码更容易(鉴于他的编辑也会使他的部署更容易!! )
            • 啊,我明白了。你很生气,因为你的工作是访问解决方案,而且你不喜欢别人敲它。阅读我的帖子。你看到我敲门了吗?他有兴趣转向 c#,是否有 Jet 提供程序的 linq(除非这些人工作 codeproject.com/KB/linq/linqToSql_7.aspx)?
            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

              • 人们不会阅读吗?最初的问题是代码变得笨拙。 20K 行对于 Jet 来说完全是微不足道的数据量。
              • 另外,20000 行对 Access 没有任何意义。您可以轻松查询 100k 行。如果总是让我感到困惑,那么很少有人了解 Access 的真正限制与想象中的限制。
              • 如果 Access 真的是一个企业数据库,那么 Microsoft 就没有理由与 Sybase“合作”,这样他们就可以开发出 SQL Server。无论如何,我不相信 Access 是多个同时用户的最佳解决方案。
              • 这就像说如果 SQLite 是一个数据库,那么就不需要 MySQL。不同的东西用于不同的目的。我们在这里谈论的是一个小型数据集,任何小型数据库系统都可以使用几十万行。此外,没有人说 Access 是企业数据库,它只是一个工作组数据库。
              • 除非 SQLLite 和 MySQL 是由同一个人开发的,否则我认为这个类比不成立。 Access 和 SQL Server 都来自同一供应商。微软没有将它们归为同一类别。这就是我的观点。如果您需要企业,那就是 SQL Server。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-10-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多