如何在 excel VBA 中运行 jsl 脚本?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />尝试在 excel VBA 环境中运行 jsl 脚本。该脚本的目的是打开两个 csv 数据表并将它们连接在一起。
脚本如下:
子加载数据()
将 myjmp 调暗为 JMP.Application
将 jmp_doc 调暗为 JMP.Document
将 jmp_BL 调暗为 JMP.DataTable
将 jmp_dt 调暗为 JMP.DataTable
将 jmp_dtFinal 调暗为 JMP.DataTable
将 jmpstr 调暗为字符串
设置 myjmp = CreateObject("JMP.Application")
myjmp.Visible = True
设置 jmp_doc = myjmp.OpenDocument("C:\Users\xxxxx\Desktop\BL.csv")
设置 jmp_BL = jmp_doc.GetDataTable
设置 jmp_doc = myjmp.OpenDocument("C:\Users\xxxxx\Desktop\cbData.csv")
设置 jmp_dt = jmp_doc.GetDataTable
jmpstr = "jmp_dtFinal= jmp_dt << Join(With(jmp_BL),合并同名列,通过匹配列(:col1 = :col2, :col2= :col2),Drop multiples( 0, 1 ),Name( ""Include不匹配"" )(1, 1),);"
myjmp.RunCommand jmpstr
两个数据表可以正确打开,但是只有join功能,不行。 有人可以帮忙写剧本吗?
谢谢你!
回复:如何在 excel VBA 中运行 jsl 脚本?是的,它将添加到 JMP 13 中。谢谢,
布莱恩
回复:如何在 excel VBA 中运行 jsl 脚本?,希望下个jmp版本加入。
谢谢你!
回复:如何在 excel VBA 中运行 jsl 脚本?抱歉,该选项尚未进入自动化。您可以使用自动化删除结果表中的列。此外,如果您不介意将表合并到现有表之一,则可以改用 UpdateTable。
布莱恩
回复:如何在 excel VBA 中运行 jsl 脚本?嗨,布莱恩
非常感谢您提供的信息。
我还有一个关于此数据连接的问题。 当我如下设置连接匹配选项以删除倍数并包括主表和表中的不匹配项时。
DT4.SetJoinMatchOptions 假,真
DT5.SetJoinMatchOptions 真,真
但是结果如下,好像这两个表join了,但是并没有和同名列合并。

通常在jmp数据表连接设置中,有一个选项“合并同名列”,如果勾选了那个,表将合并同名列。 但是在这个 VBA 中加入函数:
设置 NewDT2 = DT4.Join(DT5, JMP.dtJoinConstants.dtJoinMatching, "连接表")
没有这样的设置。
那么你知道如何实现“合并同名栏”的功能吗?
谢谢你!

回复:如何在 excel VBA 中运行 jsl 脚本?你好,
使用 VB 时,在 Visual Studio 中可以选择对对象使用“Set”,因此示例并不总是使用它。它们也是为 Visual Studio 的早期版本(如 2010)使用而编写的。显然,Excel 中的 VBA 在语法方面有其独特的怪癖。在您的情况下,它不希望在 SetJoinMatchOptions 的选项周围加上括号。另一种方法是在它前面使用 Call。这是我的 Excel 2013 中的工作示例
'第二个示例是使用来自两个类似列的匹配列的连接
'数据表。
将 Doc4 变暗为 JMP.Document
将 Doc5 调暗为 JMP.Document
将 NewDT2 调暗为 JMP.DataTable
将 DT4 调暗为 JMP.DataTable
将 DT5 调暗为 JMP.DataTable
设置 MyJMP = CreateObject("JMP.Application")
MyJMP.Visible = True
设置 Doc4 = MyJMP.OpenDocument("C:\Program Files\SAS\JMP\13\Samples\Data\Ingots.jmp")
设置 Doc5 = MyJMP.OpenDocument("C:\Program Files\SAS\JMP\13\Samples\Data\Ingots2.jmp")
设置 DT4 = Doc4.GetDataTable
设置 DT5 = Doc5.GetDataTable
DT4.AddToJoinMatchList (("Heat"))
DT4.AddToJoinMatchList (("浸泡"))
' 将选项设置为丢弃倍数并且不包括不匹配项
DT4.SetJoinMatchOptions 真、假
DT5.AddToJoinMatchList (("Heat"))
DT5.AddToJoinMatchList (("浸泡"))
DT5.SetJoinMatchOptions 真、假
设置 NewDT2 = DT4.Join(DT5, JMP.dtJoinConstants.dtJoinMatching, "连接表")
布莱恩
回复:如何在 excel VBA 中运行 jsl 脚本?嗨,布莱恩
可能我没有描述清楚。
当我尝试使用 Data Table .NET 中的示例来连接表时,我发现该示例无法正常工作。
例如:
当我打开一个数据表时,我不能只使用下面的脚本:
将 Doc4 变暗为 JMP.Document
将 DT4 调暗为 JMP.DataTable
Doc4 = MyJMP.OpenDocument(tempDir & "cbData.csv")
DT4 = Doc4.GetDataTable
相反,我需要在脚本的开头添加 Set ,如下所示:
放Doc4 = MyJMP.OpenDocument(tempDir & "cbData")
放DT4 = Doc4.GetDataTable
之后,两个数据表都可以正确导入。
而当我使用以下脚本设置连接匹配选项时:
DT4.SetJoinMatchOptions(真,假)
总是有一个错误,似乎我还需要将它发送到一个变量。 但是我不太确定“的返回值的类型是什么DT4.SetJoinMatchOptions(真,假) ”。 也许改变脚本如下:
将 str 调暗为 xxxxxx
设置海峡= DT4.SetJoinMatchOptions(真,假)
我不确定我的假设是否正确,只是不知道这个 JoinMatchOptions 可以如何设置。

回复:如何在 excel VBA 中运行 jsl 脚本?我会像示例那样传递 False 和 True 而不是 0 和 1。但是,更有可能是您的 DT4 数据导入出现问题。我很难判断该表是否已成功导入。
布赖恩·科科伦
JMP开发
回复:如何在 excel VBA 中运行 jsl 脚本?嗨,大脑
感谢您的信息。
这对我很有帮助。当我在引用 Data Table .NET 时遇到另一个问题。 Data Table .NET 中有一些示例。 我按照这个例子来完成我的脚本。
下面是数据表中的示例。 网
虽然我尝试使用类似的方式,但似乎当我设置 JoinMatchOptions 时,总是出现错误。似乎我需要为此脚本设置一个变量。
虽然我找不到此 JoinMatchOptions 的任何帮助信息。 不确定我是否遗漏了启用 JMP 自动化的任何设置,我已经在参考中包含了所有与 JMP 相关的项目。


回复:如何在 excel VBA 中运行 jsl 脚本?你好,
您不能在 JSL 和自动化之间混合对象引用。 如果需要引用数据表这样的对象,必须全部用Automation或者全部用JSL。Datatable 对象可以使用自动化 Join 方法。还有一个“AddToJoinList”方法可以添加您希望加入的列。自动化参考指南可以帮助解决这个问题,JMP 附带的数据表自动化示例程序也可以。对于 JMP 12,示例程序位于 C:\Program Files\SAS\JMP\12\Samples\Automation\Visual Basic Samples\Data Table .NET 中。 自动化参考指南“Automation Reference.pdf”位于 C:\Program Files\SAS\JMP\12\Documentation 中。
我希望这有帮助。
布赖恩·科科伦
JMP开发