【发布时间】:2011-07-12 09:50:40
【问题描述】:
抱歉,如果您以前看到过类似的东西,我已经尽我所能搜索了论坛。我正在尝试对一个我认为我已经在其他论坛上看到的问题给出明确的答案 - 我只是非常希望我误解了答案。
总之,我想编写 vba 子程序/函数,通过 C# 业务逻辑层和 ExcelDNA 从 SQL 数据库获取参数和检索数据。
C# 层是 .Net 解决方案的一部分,该解决方案将来自多个应用程序的请求编组到多个数据库。 Config 是集中管理的,DataAccess 对象是在运行时在工厂中创建的。
返回类型可能因请求应用程序而异 - 可能会请求字典、数据表等相同的数据。根据用户权限/访问、输入参数等,业务层将在之前对数据执行各种聚合和计算操作将对象返回给请求的应用程序。
不幸的是,一位用户有一个基于 Excel 的应用程序,我现在必须集成它。通过阅读有关 VSTO、COM、自动化插件和 ExcelDNA 的信息,我决定最好将一个项目添加到与 ExcelDNA 接口的解决方案中。但是,在将简单的字符串从 SQL 返回到单元格中的 Excel 函数的许多小步骤之后,我现在需要尝试将 DataTable(此处灵活)返回到 VBA 函数。 VBA 会接受一些参数,例如数据库名称、环境(PROD、UAT、DEV)、ModelRunId、startDate、endDate....
但是根据我的阅读,这是不可能的。有没有人做到这一点?我已经接近于编写一个简单的 WinForms 应用程序并在某些网格上公开“导出到 Excel”功能 - 让 Excel 用户完成这项工作......
不能直接写入 SQL Server 并使用 CopyFromRecordSet 等方法。
提前致谢
【问题讨论】:
-
ExcelDNA 的目标是让创建 .NET UDF 变得高效和简单 - 为什么需要创建 VBA UDF?
-
如果您的问题是如何让 Excel UDF 将值表返回到多个单元格,请查看创建数组 UDF。
-
我不想要 VBA 中的 UDF。所有功能都在 C# 层中。它执行数据检索、聚合、计算字段、基于安全规则删除数据等。我只想能够从 VBA 调用这些 C# 函数。该调用必须包含一些参数。返回的表的大小可能会根据列和行而变化,所以我认为这可能会使 vba 中的数组变得困难。也许我可以返回 DOM 文档?
-
您的计划的哪一部分给您带来了问题?听起来您可以在 Excel-DNA 中创建一个宏来检索和检查 DataTable 并将该数据放入工作表中。如果您需要向用户显示一些 UI 以选择哪些数据,您可以将其创建为功能区选项卡或 Windows 窗体 GUI。
-
您好,感谢您对此的回复。我读到您不能将参数传递给 ExcelDNA 中的 [ExcelCommand()],我需要这样做,以指定返回的内容。问候,詹姆斯