首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >架构Q- VBA Excel宏还是VS Office工具?

架构Q- VBA Excel宏还是VS Office工具?
EN

Stack Overflow用户
提问于 2009-11-18 14:26:00
回答 9查看 1.6K关注 0票数 4

我有来自我们客户的要求,在那里,我们基本上必须“解析”来自不同来源的PDF文件。

我们提出的解决方案是“阶段1”(因为我们有很短的时间去市场,并将为他们节省大量的时间)

  1. 手动使用Able2Extract应用程序从PDF文件中提取所需的列,并吐出一个Excel文件。这个excel文件仍然非常“脏”,因为它包含大量的头信息、我们不需要的额外字段等等。
  2. 运行我们的应用程序,将此excel文件提供给它,该文件将完成剩余的清理工作。它接受这个‘脏’Excel文件,然后给他们一个非常干净的excel文件,其中只有3或4列,他们都需要非常整齐地排列。

我们正在探索的第一个解决方案是在步骤2中使用VBA/Excel )。他们将他们的脏输出粘贴到Excel中,然后运行我们的清理宏。Excel很适合这类东西--在Excel电子表格中来回移动和擦拭数据。我们用一个特定的“源文件”做了一个概念的证明,结果非常好。大约半天时间来开发这个“擦洗脚本”.

够简单了吧?不怎么有意思。此脚本仅适用于来自一个特定源的一个特定文件类型。我们将有10个不同的来源,每个可能有3-10个不同的文件类型。这意味着最终,我们可能会得到一个巨大的Excel宏,其中包含120个非常具体的“擦除脚本”。所以我担心的是这里的长期可维护性。我们还可能碰到以前从未见过的文件,这些文件可能会“破坏”我们的擦除脚本,并且必须快速地重新编写/更改为擦除脚本.我从未使用过,使用VBA Excel宏的经验也很少--但这里似乎是一个很好的例子。

有谁可能做过类似这样的事情的人智慧的话吗?巨大的VBA宏像什么会导致这里的噩梦呢?VSTFO是一个很好的替代方案,可以让我拥有“易于移动/删除数据”的功能,但具有可伸缩性和健壮性吗?老实说,我的第一反应是使用动态编译的脚本从数据库中提取纯.NET解决方案,使用我们的Syncfusion进行清理/擦洗……但也许这是过火了。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-11-19 16:05:31

首先,不管什么情况,你都需要擦洗程序。事实上,Excel/VBA在维护此功能方面并不比其他许多平台差得多。

您可以使用Userform添加一个界面,或者玩自动检测游戏,吐出任何它不理解的“新”文件格式。也有几种健壮的错误处理方案可用,因此没有必要担心事情会被破坏。

一家石油公司雇我写了一个Excel应用程序,它使用了4个Userforms和5000多行VBA作为工具,帮助其会计师每月进行合资报告。该应用程序使用了4年,其寿命结束,因为接口是如此熟悉和易于使用。

...sorry对此漫不经心,但有一种“看不起”VBA的倾向,因为很少有“真正的程序员”使用它.

票数 3
EN

Stack Overflow用户

发布于 2009-11-18 14:46:57

VBA比VSTO容易得多。好的,VBA可能不是一种很好的语言,但至少它提供了对Excel对象模型的访问权限。基于VBA的解决方案可能比构建在VSTO上的解决方案更稳定。

我建议使用VBA,如果您关心可维护性,请考虑将“擦除脚本”存储在单独的文件中。你可以

(a)每个擦除脚本都有一个文件,每个宏具有相同的名称;您的外接程序可以为任何给定的输入文件加载(并在其中执行代码)适当的文件。

(b)每个擦除脚本都有一个文本文件,每个脚本都带有相同宏的文本;您的外接程序可以在运行时将其作为一个新模块创建--或者导入到它自己中,或者导入到临时工作簿中。这样做的效率较低,但在版本控制系统中发挥得更好,因为您可以在文本文件的不同版本之间进行区分,但在两个Excel工作簿中对模块进行区分并不容易。

在这两种情况下,您都可以将擦除脚本存储在共享文件夹中,以便在需要修改脚本时进行集中更新。

票数 3
EN

Stack Overflow用户

发布于 2009-11-18 15:07:08

我喜欢用C#编程,但我讨厌VSTO。

我有两个主要问题:。

  • 您已经没有了对代码的实时访问,它都是编译到一个DLL上的,这个DLL是附加到工作簿上的,没有正在进行的调试(这对于RAD的小片段非常有用)。在使用Excel时,通过Visual进行调试并不能替代在任何地方进行调试的能力。
  • 您使用的是为使用.NET而包装的Excel接口,而不是感觉是本机的东西。您有像sheet.get_Range("A1:B1", System.Type.Missing);这样可怕的函数调用,缺少可选参数的位置。

有很多人使用VSTO,但是在Excel平台上花了很多年时间,我发现在这一点上几乎没有什么迁移的理由。但是,考虑一下是否需要在C#/.NET中做一些在VBA中无法实现的非常酷的事情(例如反射)。

您可以在VBA中编写非常好的代码;它会收到很多坏消息,因为这是一个不会因为编写不好的代码而惩罚您的环境,而且任何人都可以使用VBA。

这可能只是一个脾气暴躁的开发人员对VBA而不是VSTO有经验的抱怨。所以说了所有这些--如果你不熟悉VBA,你最好直接去VSTO。我不确定微软打算对VBA做些什么;VSTO应该是未来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1756355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档