0

我们目前有一个包含大量 VBA 代码的 Excel 电子表格。VBA 代码负责:

  • 操作、转换和格式化工作表数据。
  • 调用 C# 和 C++ COM 公开的功能。在这样做时,将工作表数据编组到 C#/C++ 方法中,获取结果并使用结果更新工作表。

以及其他所需的实用程序代码。

我们现在想向 Excel 工作簿添加一个新工作表,并且不需要任何 VBA。我们想使用 C#。正如我所看到的,我仅限于以下选项:

  • 将整个项目移植到 VSTO 手动将 VBA 重新编码为 VSTO 项目中的 C#。
  • 用 C# 编写新工作表的功能并通过 COM 公开它。C# 代码将使用 Excel PIA 来更新工作表。该工作表需要一个非常薄的 VBA 层来将数据编组到 C# 方法。

我认为 ManagedXLL 不会在这方面对我有所帮助,因为我的代码要求与处理工作表数据有关,而与使用结果更新工作表有关。

请评论/询问更多细节。

谢谢。

4

2 回答 2

1

你忘了:

  • 将整个项目移植到 VSTO,将现有代码移植到 VB.Net(其中一些只会复制/粘贴)并用 C# 编写新代码。
  • 将新工作表放在单独的工作簿中,并将旧工作簿作为数据源调用。
于 2009-02-10T17:10:52.187 回答
0

看看你是否需要我的建议......在开发方面可能需要更长的时间,但是......无论你使用 VB.Net 还是 C# 都采用这种方法......

  1. 做一个喜欢的转换。对于具有最少或没有文档的大量 VBA,这将帮助您了解有时令人费解的逻辑和数据解析方法。

  2. 逐个单元格迭代更改单元格的所有实例,并循环读取一次写入表一次类型的方法。这将涉及重写代码部分。在方法开始时读取所有道具和值,并在最后写入所有要返回的道具和值。

  3. 确保所有数据和逻辑处理在 .net 中使用 .net 数据类型完成,不要直接在循环内使用范围对象或工作表对象属性,这只是代价高昂的方式。

  4. 最后确保如果您使用多个线程,则在主线程上执行所有“Excel 工作”。

  5. 阅读 SO 以获取有关正确处理 COM 对象的许多提示。谨防错误的处置模式。

于 2010-02-24T22:08:13.593 回答