【问题标题】:Ask Excel to execute C# code让 Excel 执行 C# 代码
【发布时间】:2015-06-01 13:34:56
【问题描述】:

是否可以让 Excel 启动一个 C# 方法?
您将如何在 Excel 中实现这样的调用?

(即我不想用 VB 编程,而是想用 C# 编程)

我可以想象使用 VB 宏在后台启动 C# 应用程序,但也许你知道更好的方法?

例如,应在单击特定 Excel 单元格时执行 C# 代码。

【问题讨论】:

  • 您能解释一下您正在做什么并希望最终实现的目标吗?听起来您正在尝试做一些超级hack-y。如果我们有一些上下文,我们也许可以提出更好的方法。
  • 是的,我可以更详细地解释一下我试图完成的工作:最终,具有良好 GUI 的 C# 应用程序将完成最终需要完成的全部工作。这个(最终的)C# 应用程序将不得不处理几个 Excel 文件。它将打开 Excel 文件,对其中几个 Excel 文件的工作表执行一些约束检查,并根据需要的顺序重新组合其中的一些内容。 GUI 将帮助用户使用几个 Excel 文件完成任务。到目前为止一切顺利。
  • 现在,我尝试将构建 GUI 架构的工作分成几个子任务,以便让我的程序员小团队开始工作。一个子任务是使用单个 Excel 文件测试 约束检查。而且我确实希望能够直接在 C# 中对该任务进行编程,以便稍后在最终应用程序中简化该架构子任务的集成!在 VBA 中对约束检查进行编程是不值得的,因为此代码对最终的 C# 应用程序没有任何帮助。此外,我的团队比 VBA 更了解 C#。

标签: c# vb.net excel dll


【解决方案1】:

你可以通过 VBA 打开一个程序。通过单击 Excel-Cell 调用此 VBA 脚本:

var Path = "MYPROGRAMPATH"
var Argument = "MYARGUMENT"
x = Shell("""" & Path & """ """ & Argument & """", vbNormalFocus) 

要对单元格更改做出反应,请使用以下事件:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'YOUR CODE
End Sub

然后编写您的 C# 应用程序并让它确定参数。
您的程序应该根据过滤后的参数做出反应。

这可以通过Environment.GetCommandLineArgs-Method 来完成。

public static void Main() 
{
   Console.WriteLine();
   //  Invoke this sample with an arbitrary set of command line arguments.
   String[] arguments = Environment.GetCommandLineArgs();
   Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments));
   //Handling of arguments here, switch-case, if-else, ... 
}

【讨论】:

  • 我不得不承认,这有点骇人听闻。但它应该可以解决问题。如果它有效,谁在乎;-)
  • 谢谢 Janes Abou Chleih !!我会试试看的!
  • 能否详细说明“x = Shell(Path&Argument, vbNormalFocus)”的语法。它没有立即为我工作!如果我写“x = Shell(Path, vbNormalFocus)”一切正常 - 但是“&argument”不知何故没有。我需要更多帮助...非常感谢!
【解决方案2】:

我找到了 VBA 宏的解决方案:

Sub Button1_Click()

    Dim pathStr As String
    Dim argumentStr As String

    pathStr = "C:/Users/.../Desktop/temp/Trial02.exe"
    argumentStr = "Any argument string"

    Call Shell("""" & pathStr & """ """ & argumentStr & """", vbNormalFocus)

End Sub

【讨论】:

  • 哦 - 我猜我们的速度是一样的 ;) 谢谢!!
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 2012-04-15
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多