【问题标题】:20 minute Excel macro to run from c# Winform从 c# Winform 运行 20 分钟 Excel 宏
【发布时间】:2012-06-13 11:43:10
【问题描述】:

我们有一个大约需要 20 分钟才能完成的宏。 我们有一个用户可以访问的 c# winform - 它包含一个“运行宏”按钮。 我希望用户可以点击按钮,然后实际关闭表单,然后在 20 分钟内在预定义目录中查看宏的输出。

是简单地创建一个委托并让委托运行宏的情况还是上述不是一件小事?

几个可能可行的想法:

  • 只是在用户按下按钮后隐藏表单?缺点是宏仍然会在 Excel 实例中占用用户的 CPU?
  • UserX 电脑上的 winForm 能否以某种方式启动在我们的“Excel”服务器上运行的程序?这听起来有些牵强,但也许有人可以提供帮助。
  • 与上述类似,也许在 Excel 服务器上,我可以创建一个小型守护程序控制台应用程序,该应用程序计划每 2 秒运行一次,并检查共享数据库上的表以查看是否需要运行任何宏。用户的 winform 可以更新此控制表,然后守护程序开始工作。

【问题讨论】:

  • 您有从 .net 自动化 Excel 的经验吗?带有宏的工作簿是否已经打开?我想你可以考虑使用Application.Run 来实现这一点。
  • 不,您不能必须让 C# 应用程序保持打开状态,因为它将处理 Excel 进程。你想让我了解更多细节吗,只需检查我的最后几个问题.. VSTO,Excel 问题。如果您想让我研究您的答案,请告诉我?
  • + 1 @whytheq:好问题 :)
  • 这将向您展示如何从 C# 运行 vba 宏:support.microsoft.com/kb/306683
  • 这里有一些远程运行进程的建议:stackoverflow.com/questions/428276/…

标签: c# winforms excel


【解决方案1】:

是的,很简单。

使用 C# 启动 VBS 文件。代码将类似于

System.Diagnostics.Process.Start(@"cscript //B //Nologo c:\MyScript.vbs");

上面的代码将启动 VBScript,没有提示或错误,也没有 shell 标志。

下一步是创建一个 vbs 文件。

打开记事本并粘贴此代码并将其保存为MyScript.vbs 文件

Dim xlApp, xlBook

Set xlApp = CreateObject("Excel.Application")
'~~> Change Path here
Set xlBook = xlApp.Workbooks.Open("C:\Test.xls", 0, True)
xlApp.Run "TestMacro"
xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

【讨论】:

  • 非常熟悉...我一直在使用很多 vbs 文件来运行宏,但我必须承认我正试图摆脱 vbs 文件。为什么不打开 Excel 并从 c# exe 中运行 TestMacro?
  • @whytheq:因为那样你必须等待 20 分钟才能完成宏;)
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多