【问题标题】:MATLAB as COM Automation Server with JavascriptMATLAB 作为带有 Javascript 的 COM 自动化服务器
【发布时间】:2019-04-16 08:59:51
【问题描述】:

我正在尝试按照 MathWorks 网站上的建议,使用 COM 自动化服务器在 Matlab 和 Javascript(在我的情况下为打字稿)程序之间建立连接。网站上的文档包含 MS 创建的某些语言的示例,而不是 javascript。

我似乎找不到很多关于如何与 JS 建立这种 COM 连接的信息。根据我的阅读,这是一项仅用于 Internet Explorer 的旧 Microsoft 功能。

问题
我正在编写的程序是 VS Code 扩展,因此我根本没有使用 Internet Explorer。结果,我不相信我可以使用 ActiveXObjects。

问题
还有另一种方法可以在我的打字稿代码和 Matlab 实例之间建立连接吗?

目标
我正在尝试从 VS Code 终端运行 Matlab 文件,而无需打开自定义 Matlab 终端或完整的 Matlab GUI。输出也应该显示在 VS Code 终端中。在 MacOS 和 Linux 上,我可以简单地使用 CLI 工具,但由于 Windows 版本和 MacOS/Linux 版本之间的差异,这在 Windows 上是不可能的。

【问题讨论】:

  • 如果可能,请考虑添加适用于 MacOS/Linux 的工作示例。这对于使诸如此类的问题对未来的用户有用非常有帮助。同时提供您提到的 Mathworks 文档的链接。
  • 如果放弃COM路径,转用python怎么办?这可以接受吗?
  • @hackape 我必须使用 Javascript 来创建 VS Code 插件。问题是我不能使用 ActiveXObject,因为至少据我了解,它仅用于 Internet Explorer
  • 对不起,我对这个 COM/ActiveXObject 的东西知之甚少。我看到你是 Matlab Code Run 的作者,检查了源代码。在我看来,你真的在​​寻找一个一致的跨平台接口来实现 js 和 matlab 之间的互操作。这就是为什么我提出 python 作为一个选项。
  • 而且我认为没有多少人知道这个 COM 的东西。所以我的想法是,不要在你的问题中这么早就将你的选择限制在 COM 上。另外,我不确定 linux/window CLI 接口到底有什么区别,即使使用一些适配器/包装器也无法克服?

标签: javascript matlab typescript com


【解决方案1】:

我没怎么用过 TypeScript,而且我用的很少,那是很久以前的事了,那时它是全新的。

但是,NPM 包 win32ole 可以在 NodeJS 中使用,所以我假设你也可以在 Typescript 中使用它(可能对示例进行一些小的修改,或者一个小的包装器)。

win32ole npm page

这是该页面中的一个示例,展示了如何与 Excel 交互以创建和保存工作表。

try{
  var win32ole = require('win32ole');
  // var xl = new ActiveXObject('Excel.Application'); // You may write it as:
  var xl = win32ole.client.Dispatch('Excel.Application');
  xl.Visible = true;
  var book = xl.Workbooks.Add();
  var sheet = book.Worksheets(1);
  try{
    sheet.Name = 'sheetnameA utf8';
    sheet.Cells(1, 2).Value = 'test utf8';
    var rg = sheet.Range(sheet.Cells(2, 2), sheet.Cells(4, 4));
    rg.RowHeight = 5.18;
    rg.ColumnWidth = 0.58;
    rg.Interior.ColorIndex = 6; // Yellow
    var result = book.SaveAs('testfileutf8.xls');
    console.log(result);
  }catch(e){
    console.log('(exception cached)\n' + e);
  }
  xl.ScreenUpdating = true;
  xl.Workbooks.Close();
  xl.Quit();
}catch(e){
  console.log('*** exception cached ***\n' + e);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2011-07-29
    • 1970-01-01
    相关资源
    最近更新 更多