从Excel/VBA调用Scala函数

Phi*_*ZXX 7 excel vba scala dllimport

我知道使用C++可以创建包含某些功能的DLL文件,然后可以将其导入Excel(例如通过VBA).我们来看看下面的C++函数

double __stdcall square_it(double &x)
{
    return x*x;
}
Run Code Online (Sandbox Code Playgroud)

我们假设它包含在square.dll中,以便我们可以使用以下VBA导入

Declare PtrSafe Function square_it Lib "square.dll" (ByRef x As Double) As Double
Private Sub TestSub()
    MsgBox square_it(4.5)
End Sub
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:是否可以在Scala中编写函数,然后以类似的方式从VBA调用它?

Oli*_*ain 4

Scala 与 Java 在这里不会有任何不同,并查看 Java 问题,例如您可以在 VB.net 程序中使用 Java 库吗?以及从 VBA/VBScript/Visual Basic Classic 调用 Java 库 (JAR),没有好的解决方案可以在 VBA/Java 或 VBA/Scala 中获得与 VBA/C++ 相同级别的集成。

您始终可以使用任何外部通道在 VBA 和 Scala 之间进行通信,例如 shell、文件系统,甚至 http,但这不会像 VBA/C++ 示例那样简单和高效。

通过 shell 进行通信的情况如下:

在 example.scala 中:

object Example {
  def main(args: Array[String]): Unit = {
    val d = args.head.toDouble
    println(d * d)
  }
}
Run Code Online (Sandbox Code Playgroud)

在 example.vba 中:

Module Example
  Sub Main()
    Dim command As String 
    command = "scala /path/to/example.scala 123"
    Range("A1").Value = CreateObject("WScript.Shell").Exec(command).StdOut.ReadAll
  End Sub 
End Module
Run Code Online (Sandbox Code Playgroud)