远离 Excel 工作簿/VBA - 技术升级 [关闭]

Posted

技术标签:

【中文标题】远离 Excel 工作簿/VBA - 技术升级 [关闭]【英文标题】:Moving away from Excel Workbook/VBA - Technology Upgrade [closed] 【发布时间】:2017-05-14 15:53:09 【问题描述】:

这将更像是一个意见问题,因为我无法在 Google 或我公司内任何对此有意见的 SME 上找到任何答案。

我不确定意见问题是否合适,所以如果不合适,请随时删除此问题、禁止我或任何规则可能规定的问题。

我正在处理大量用于数学计算的非常旧的工作簿,这些工作簿不用于生产,它们用于检查生产服务的结果。工作簿非常古老(大约 12 年以上),现在我称之为过去十年的修补/修复中的“一团糟”。

我一直在研究 Handsontable (https://handsontable.com/) 一个 JS 库,它提供了一个像 Excel 这样的电子表格界面,可以处理单元格值的所有设置等......然后使用 Python(或者 Java,如果公司更喜欢使用 J2EE)在服务器端或客户端进行一些繁重的计算(数据查找和预测),我觉得从 VBA 和 Excel 本身迁移将提供 Operations 所喜欢的性能提升。

我觉得最初的工作会花费很多时间,但我相信我可以在 JS/Python/Java 中创建一组通用的库,一旦完成,就可以减少大量需要的重新编码要在 VBA 到 JS/Python 端完成,因为 80% 的 VBA 是常见的财务公式。

我担心的是,如果我们在另外 2-3 年内继续使用当前的工作簿,它们将变得完全无法维护,这主要是因为使用 VBA 我们没有适当的版本控制或使用现代自动化代码审查工具,我们可以通过使用更新的技术从中受益,而且长期以来,努力工作将被证明是我们现在的开发人员和我未来的同事的最佳选择。

如果规则和版主都同意这个问题,有人对此有什么意见吗?这值得吗?是不是很浪费时间?

注意:我不是经理、主管或任何有权做出上述决定的人,我只是一个觉得我......我们可以做得更好的开发人员。

感谢您的宝贵时间。

【问题讨论】:

CSV 用于数据存储是恕我直言的方式。任何程序都可以使用,与excel高度兼容 这对于 SO 来说可能不是一个合适的问题,(猜猜它属于像程序员之类的人)但它仍然是一个好问题。我们做了完全相同的练习。从 VBA 中提取所有与数据库相关的代码并将其移动到我们可以使用 ajax 调用的服务 API 中。 excel 本身被制作成我们应用程序中的一个模块。我们先编写了应用程序,然后才开始逐个转换每个报告。通过用一个快速的应用程序替换非常慢的 Excel 报告,我们已经为每人每天节省了近一个小时的管理工作。此外,高层管理人员喜欢移动友好的报告。 让我澄清一下,我们已经有一个生产/工作簿应用程序使用的数据库,所以它的数据与其说是 VBA、公式等...我只是想对工作簿进行现代化改造以防止大量的技术债务累积起来,因为我们会看到工作簿,就像“WTF 是这样的”? 在我个人看来,远离 excel 是最好的部分,但这主要是因为我们不需要报告中的任何 excel 功能。我们的 Ops 不需要在他们的报告中编写 Excel 公式,他们基本上只是使用 Excel 作为查看数据库并对生产数据进行一些预先格式化的计算的一种方式。通过优化的 SQL、快速的后端和轻量级的应用程序库,我们现在可以提供准实时计算。如果您的 Ops 需要能够使用重要的 Excel 功能,Office 365 或 sharepoint 之类的可能会更好。 我对大约 150 名陆上/海上运维人员进行了调查,大多数人从不真正手动编辑单元格,除非他们为生产服务器提供“正确”参考的静态工作簿(例如正确的数量)所以它实际上只是一个静态布局,有几张定义了名称的工作表,然后在 VBA 中设置;有些是通过公式完成的,但是有 JS 库可以处理所有 Excel 公式,所以这不是问题。然后将工作簿转换为 XLSM 使工作表 CVS,因此我可以直接转换为 Handsontable 数组:) 困难的部分是 VBA。 【参考方案1】:

所以这可能不是每个人的答案,但我将向您介绍我们决定首先投入时间的内容,因为此方法已在另一个应用程序上使用,以将其从旧语言迁移到 Java。

我们在网上找到了几个将 VB/VBA 代码转换为 Python 的开源项目。

例子:

http://vb2py.sourceforge.net/ https://pypi.python.org/pypi/vb2py

一旦我们的 Python 代码使用本机包工作以允许 MS 互操作访问,我们将开始将 Python 代码重构为 Django 项目(这个选择并不牢固,但它是我的首选;

最终的计划是让 Django 项目仅充当 REST Web 服务,用于对 Python 执行“繁重的数学/计算”功能,并且还可以在更强大的服务器上提高性能。此 REST 服务将使用处理所有当前 Excel 公式所需的插件回答来自 Handsontable (https://handsontable.com/) JS 电子表格的调用,因此我们可以直接 1:1 复制我们的单元格值/样式(将工作簿转换为 xlsm 使所有存储为 XML 的数据)到 Handsontable 的“布局数组”;我认为我们将把它放在一个数据库中。因此,最终我们现在已经发布了 15 年以上的工作簿,并将 Excel 从等式中全部删除。

目前(我的)使用 Django 的原因是:

    ORM 独立的 Django 包可以更轻松地减少冗余代码(我知道这可以只用纯 Python 完成,但我觉得这是为其他人提供答案的好理由) 使用一些非常流行的 REST 包之一轻松实现 Web 服务。 还有其他人,但我相信每个人都会得到我的积分。

以及Python的原因:

    在 Linux 上运行,运行 VBA 宏服务器端需要 Windows(不好:与 Linux 相比,VM 成本和操作系统开销更少)。 很容易学(反正我觉得) 自定义方法装饰器将标准利率等内容应用于方法的返回金额,而不需要实际计算金额的函数中的利率代码(作为示例)

谢谢

【讨论】:

以上是关于远离 Excel 工作簿/VBA - 技术升级 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用VBA代码打开其他excel工作簿(有打开密码的)???

excel如何用vba批量提取指定工作表?

Excel用vba按先后顺序打开一个文件夹中的N个excel工作簿,运行一段宏程序后

Excel VBA 关闭当前工作簿错误 1004

Excel-VBA - 列出任何给定工作簿的所有用户窗体的控件

在工作簿关闭的Excel VBA中禁用剪贴板提示