【问题标题】:Excel Macros with Javascript带有 Javascript 的 Excel 宏
【发布时间】:2013-12-08 22:17:01
【问题描述】:

我希望使用 Javascript 中的宏而不是默认的 VBA 来操作 excel 电子表格。我可以使用以下 VBA 代码执行 javascript 代码

'javascript to execute
Dim b As String
b = "function meaningOfLife(a,b) {return 42;}"

'VBA tool to run it
Dim o As New ScriptControl
o.Language = "JScript"
o.AddCode b
MsgBox o.Run("meaningOfLife", 0, 1)

这使我能够执行任意 javascript,但是我无法从 javascript 环境中访问 excel 电子表格。有什么方法可以在 javascript 中设置和获取活动工作表中的工作表值?

【问题讨论】:

  • 你能把 excel 对象传递给 JavaScript 吗?而不是 0 和 1?
  • @ArchimedesTrajano,看看 ExcelDNA 看看他们是怎么做的,然后适应 JS 而不是 C#
  • 您为什么要这样做? VBA 环境对于 Excel 开发来说要好得多。如果只是 {}s 与 End If,那么您将了解到 End If 实际上更好......
  • @Tuntable 我同意,当时我有一些想要执行的 js。一般来说,使用 VBA 会更好。

标签: javascript vba excel


【解决方案1】:

对于使用 Excel 2016 或更高版本的用户,加载项商店中有一个名为 Funfun 的 Excel 加载项,它实际上允许您直接在 Excel 中编写和运行 JavaScript 代码。当然,您的 JavaScript 代码也可以访问存储在电子表格中的数据。这是它在 Excel 中的样子的屏幕截图 2016.

在界面中间有一个部分,您可以在其中编写 JavaScript、CSS 和 HTML 代码。它很像 Excel 中内置的游乐场。但是 Funfun 也有一个在线编辑器,您可以在其中使用您的代码进行测试。你可以在下面的图片中看到它。我还在第一张图片中发布了示例的链接,以便您可以玩。

https://www.funfun.io/1/#/edit/5a4e0d461010eb73fe125c4e

Funfun 在线编辑器的特别之处在于它包含一个类似于 Excel 的“电子表格”。尽管您实际上无法在此处进行任何格式化,但您可以将数据复制到单元格中并直接测试您的代码。

要使用存储在电子表格中的数据,您只需在 Funfun 的 short.io 文件中编写一些配置,告诉 JavaScript 电子表格中的哪个区域包含您的数据。例如,在我发布的示例中,您只需编写

{
    "data": "=A2:B9"
}

在 JavaScript 代码中,一个名为 $internal 的对象用于读取数据。因此,为了读取存储在 A2:B9 中的数据,您需要编写

var data = $internal.data;

它完成了。如果您想了解更多信息,可以访问documentation of Funfun。

如果您对在线编辑器中获得的结果感到满意,您可以使用上面的 URL 轻松地将结果加载到 Excel 中。当然,首先您需要从 Insert - My add-ins 中插入 Funfun 插件。以下是一些屏幕截图,展示了如何执行此操作。

披露:我是 Funfun 的开发者

【讨论】:

    【解决方案2】:

    这取决于你想做什么样的“Excel编程”。

    如果您想操作 Excel 文件,您可以通过 COM 自动化,甚至在某种程度上使用 ODBC,使用在 Windows 脚本环境下运行的 JavaScript 来实现。

    但是,如果您想让您的代码在活动的 Excel 会话中运行访问者将看到的事情,那么您的选择就更少了。

    查看我几年前发布的这个问题,当时我想在 Excel 中运行一些 JavaScript,但没有预算转换为 VBA:

    How can I use JavaScript within an Excel macro?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多