MS Word可扩展性:VBA宏与.Net VSTO?

时间:2011-10-03 08:06:59

标签: vba ms-office vsto

我的一位客户要求我们开发“VBA宏”。然而,在2010年代,我仍然使用这种过时的语言似乎很奇怪,我正在考虑试图说服客户使用VSTO dev。但是,由于我是两个世界的新手,我需要帮助填写赞成/反对页面才能辩论。

当然,答案不能没有实际要求,让我试着恢复:

  

目标:Word 2003/2007(但我怀疑2010年尚未知的要求) 编辑 2010年要求已确认

     

外部发布系统需要 .doc 文件作为输入。 .doc 文件必须应用一些特定样式:“自定义标题1”,“自定义标题2”等。

     

用户可以使用Word以两种可能的方式构建文档:

     
      
  1. 使用部署在计算机上的.dot文件启动新文档
  2.   
  3. 转换任何现有文档以匹配目标模板
  4.         

    用户可以“简单地”(简单的用户界面)“应用”样式:上下文菜单,样式菜单,自定义操作窗格等。

到目前为止,我看到以下优点:

  1. VBA

    • 优点:
      • 快速而肮脏的发展(句子的快速部分)
      • 客户已经有一些生产宏
    • 缺点:
      • 很难找到熟练的开发人员
      • 快速而肮脏的发展(句子的肮脏部分)
  2. VSTO

    • 优点:
      • .Net语言的好处(编译,打字,严谨,类库等)
      • 安全模型更灵活,更强大(信任代码与受信任的机构签署)
      • 可以连接到WPF窗格
      • 您在Visual Studio中工作并可以访问其全部功能:重构,源代码控制等。
    • 缺点:
      • 需要安装.Net框架(今天可能不是问题)和VSTO运行时
      • 更难部署
      • 一开始稍微多做一些工作(但长期工作量较少)

5 个答案:

答案 0 :(得分:3)

我对.NET不够熟悉,但这是我对VBA的拙见:

<强> VBA

  • 优点:
    • 易于部署并使其与Office应用程序配合使用
    • 快速而肮脏的发展(句子的快速部分) - 同意
  • 缺点:
    • 很难找到熟练的开发人员
    • 很难选择熟练的开发人员并向 投资 解释您需要的客户
    • 快速而肮脏的发展(句子的肮脏部分) - 部分协议。如果:
      • 您将项目提供给VBA初学者并且不构建他/她
      • 项目变得太大 要求
    • 需要安装.Net框架(今天可能不是问题)我不这么认为(可能是VSTO的CONS?)

我想说如果你只想要一些代码或加载项来合并一些syles,你可以轻松地用VBA 来做它并且它不会很脏(除非你真的想要它来)。

答案 1 :(得分:2)

随着项目的完成,我正在回答这个问题。

我最终决定使用VBA宏编写应用程序。以下是此选择的验尸结论:

优点:

  1. 维护应用程序的团队没有C#知识,只有VBA(我选择的主要原因)。
  2. 安全模式不佳:它是专业版,因为没有其他设置可以将文件放在正确的位置。
  3. 没有运行时先决条件
  4. 缺点:

    1. 部署应该很简单。
      • 我在计算使用Word选项“用户模板目录”和“启动模板目录”的可能性。但这是不可能的,因为应用程序与客户组织中的特定实体无关。我不被允许为此应用程序“取得”此设置的所有权。
      • 我最后编写了一个自定义NSIS脚本,以便在正确的文件夹上部署应用程序。使用VSTO,一个简单的安装项目(clickonce?)就可以完成这项工作。
    2. 语言是如此史前!集合索引从1开始,数组为0,没有OOP,开箱即用的语言和库功能很差。这并不总是一个问题,但就我而言,对业务规则建模有点痛苦(在树中表示分层数据并不是一件容易的事)。
    3. 与源代码控制的集成非常有限(代码,因为它嵌入在.dot文件中,不具有历史意义。只有完整的.dot)
    4. 错误管理非常受限于VBA
    5. 糟糕的IDE
    6. 注:

      作为一名经验丰富的C#开发人员,优点/缺点可能有点偏。

答案 2 :(得分:1)

我是一个沉重的Excel VBA开发人员。

VBA专业版: 我从VBA切换到VSTO的主要障碍之一 - 相信我,我喜欢C#编码 - 就是我的用户群已经习惯了没有即时调试。我经常直接跳到用户PC上的VBA问题,但是使用VSTO时,这是不可能的。 (除非有人能纠正我。)

如果您的用户没有这样的期望,那么这可能是您可以轻松实现的。

VBA con: VBA是易于使用的语言之一,因此很容易弄乱。它没有强制执行“清晰编码”原则,这意味着虽然体面的程序员可以使用它们制作出色的应用程序,但由于其低进入条件,VBA可能会与hackjobs和庞大的有机代码相关联。由于这个原因,VBA开发人员通常被认为是较低级别的开发人员,而实际上无法区分明智地使用它和不使用它的那些。

我怀疑是否有人选择VBA作为他们选择的职业语言,它只是发生在他们身上。除了难以找到技术熟练的开发人员之外,过多的VBA工作可能会削弱潜在的雇员,因为他们不想与“另一个无管理的VBA蔓延的泥潭”联系在一起。有些人利用VBA作为关于技术“严肃”程度的陈述。

(我倾向于以同样的方式看待Perl;非常适合短脚本,但是当曾经用于编写脚本的人开始使用更大的工作时 - 你往往会得到一些有点笨拙的东西。)

答案 3 :(得分:1)

在这个article中,我试图在Excel的背景下总结类似的问题。相同的参数适用于所有Office应用程序,包括word。

答案 4 :(得分:0)

根据我的观察: VSTO: 缺点:如果我们为word 2007开发了Addins色带控件,我们只能使用word 2007进行部署,但我们无法使用word 2010或word 2013进行部署。 这是我为2007,2010和2013年所有版本开发Addins for word和excel的主要缺点。如果错误或者建议我如何为所有办公室版本开发单个插件,请纠正我。