我在Windows 7下使用JMP 9.0.3 64位,並通過Python自動執行(編輯:我已經確認該錯誤可以同樣用VBScript自動化進行復制,並且仍然存在於JMP 11.0.0中) 。我的自動化代碼基於JMP 9自動指南。所有的JMP9 PDFs seem now to have disappeared from the website。JMP 9自動化錯誤 - 解決方法?
這個bug對我來說已經變得相當不錯了。我經常需要操作自動化代碼中的表格,然後用JSL代碼交換表名,並且這個錯誤使得不可能可靠地做到這一點。 有沒有人遇到過它?任何已知的修復或解決方法?
(我還沒有看到StackOverflow上許多JMP/JSL的問題,但我在這裏張貼在關閉的機會,也有一些JMP-使用觀望者原本張貼在SAS的JMP論壇:https://community.jmp.com/message/213132#213132)
問題
的Document
自動化對象具有屬性Name
,FullName
,和Path
這是爲了反映相關聯的JMP表的表名或文件名。然而,在很多情況下,這些屬性都是空白的,儘管該表有一個非空白名稱,可以從JSL代碼和進行訪問,儘管實際上可以使用該名稱檢索表自動化對象。
演示代碼
下面是一些演示錯誤的Python代碼。它使用JSL創建一個表,保存該表的名稱,並按名稱查找表的自動化對象。然後它會檢查table.Document.Name
是否與表格的已知名稱相匹配(僅用於查詢它),並報告不支持的情況。它這樣做是100倍,一般的名稱開始回來空白第2-4次迭代後:
from win32com.client import gencache
mod = gencache.GetModuleForProgID("JMP.Application")
app = mod.Application()
okay_table = [None]*100
for ii in range(len(okay_table)):
# Create a table in JMP
app.RunCommand("show(%d); ::dt=New Table(); ::retval=dt<<Get Name()" % ii)
# Retrieve the name of that just-created table from the JSL variable
retval = app.GetJSLValue("retval")
# Retrieve the automation object for that table, by name
table = app.GetTableHandleFromName(retval)
# Now, table.Document.Name **SHOULD** match retval, but
# it may be blank due to the bug.
if not any((table.Document.Name, table.Document.Path, table.Document.FullName)):
print "table %d: got blank table.Document.Name=%s, Path=%s, FullName=%s" % (ii,
table.Document.Name, table.Document.Path, table.Document.FullName)
app.RunCommand("close(DataTable(::retval), nosave)")
okay_table[ii]=False
else:
print "table %d: looks okay; Name=%s, FullName=%s, Path=%s" % (ii,
table.Document.Name, table.Document.FullName, table.Document.Path)
app.RunCommand('close(DataTable("%s"), nosave)' % table.Document.Name)
okay_table[ii]=True
print "Number of bad tables: %d" % okay_table.count(False)
典型輸出:
table 0: looks okay; Name=Untitled 304, FullName=Untitled 304.jmp, Path=Untitled 304.jmp
table 1: looks okay; Name=Untitled 305, FullName=Untitled 305.jmp, Path=Untitled 305.jmp
table 2: got blank table.Document.Name=, Path=, FullName=
table 3: got blank table.Document.Name=, Path=, FullName=
table 4: got blank table.Document.Name=, Path=, FullName=
...
table 98: got blank table.Document.Name=, Path=, FullName=
table 99: got blank table.Document.Name=, Path=, FullName=
Number of bad tables: 98