JMP能否支持通過JSL格式化Excel全部,
通過社區中關於該主題的多個不同帖子,我相信我知道我的問題的答案。 但是,我仍然會繼續總結這個問題,看看是否有其他人走上了這條路。
問題陳述: 在先前接受和認可的模板中生成 Excel 工作簿
不用於辯論: 為什麼選擇 Excel 輸出格式
在閱讀以下帖子時:
- https://community.jmp.com/t5/Discussions/Excel-Table-Formatting/mp/33650#M19957
- https://community.jmp.com/t5/Martin-Demel-s-Blog/JMP-and-Excel-A-Never-ending-story-Part-2-cont/ba-p/35941 (以及所有關於主題的相關博客文章)
- https://community.jmp.com/t5/Discovery-Summit-2016/Working-With-Excel-the-Advanced-Edition/ta-p/23969
可以理解,很多重點都放在如何在 Excel 和 JMP 之間導入和導出數據上。 然而,他們都沒有真正談到保留/自定義從 JMP 和 Excel 導出的數據格式。 不管我們喜不喜歡,Excel 仍將存在,並且將持續需要通過 Excel 呈現我們的結果(至少每個用戶不能擁有 JMP 許可證)。
鑑於這種背景,我有一個 Excel 模板,我想使用 編輯 Excel 模板中的一些數據JSL最好。 這是我在 JMP 中擁有的一個非常大的應用程序的最後一步。 理想情況下,我只需要讓 JMP 編輯模板中的數據並保存工作簿。 不幸的是,正如您所預料的那樣,當我在 JMP 中打開文件的那一刻,格式進行了一次折騰,給我留下了一個亂碼格式,這對用戶來說並不是真正的呈現。
所以,
1. 有沒有辦法使用 JSL 而不是 VBA 來保留 Excel 模板中的格式並編輯文件中的數據?
2. 假設我之前的問題的答案是“否”,我已經走上了在 R 中使用“XLConnect”包的道路。 然而,這也遇到了麻煩。 我不希望 JMP 社區解決有關為什麼 R 包沒有產生結果的問題。 如果有人有興趣提供幫助,請在下面提供 R 代碼。還附上了我正在試驗的示例模板
# Clear Console and screen
cat("\014") # Clear Console
rm(list = ls(all = TRUE)) # Clear Workspace
options(java.parameters = "- Xmx1024m")
# Load desired packages
suppressPackageStartupMessages(library(XLConnect))
# Define FilePaths
FolderPath <- "C:\\Users\\Temp\\Desktop"
TemplateFilePath <- paste(FolderPath, "LoanTemplate.xlsx", sep = "\\")
OutputFilePath <- paste(FolderPath, "MyLoan.xlsx", sep = "\\")
OutputFilePath1 <- paste(FolderPath, "MyLoan1.xlsx", sep = "\\")
OutputFilePath2 <- paste(FolderPath, "MyLoan2.xlsx", sep = "\\")
# Read Data
TemplateData <- readWorksheetFromFile(TemplateFilePath, sheet = 'Loan Schedule', header = T)
MyData <- TemplateData
MyData[[4]][2] <- 10000
# Set Style Action
setStyleAction(wb, XLC$"STYLE_ACTION.NONE")
# Trial 1
writeWorksheet(OutputFilePath, MyData, 'Loan Schedule', styleAction = XLC$STYLE_ACTION.XLCONNECT, clearSheets = TRUE)
# Trial 2
writeWorksheetToFile(OutputFilePath1, MyData, 'Loan Schedule', styleAction = XLC$STYLE_ACTION.XLCONNECT, clearSheets = FALSE)
#Trial 3
writeWorksheetToFile(OutputFilePath2, MyData, 'Loan Schedule')
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎@uday_guntupalli除了編輯 XML 之外,還有一種方法可以編輯 Excel 並保存格式和函數:使用 JMP 函數將 Excel 視為數據庫。 我只對具有數據庫佈局的工作表執行此操作,即列是字段,行是記錄。
我不是 SQL 專家,但您可以找到有關使用表更新許多數據庫記錄的文檔。 我將提供一個簡單的例子。
下面是一個簡單的 Excel 文件的圖片,其中包含兩個工作表和格式。該文件被稱為供應商.xlsx並且要更新的工作表被命名為供應商. 這本書JSL 伴侶,第 2 版, 記錄了三個 JMP ODBC 方法:打開數據庫() ,新的 SQL 查詢()其中一個作者命名為三步法。

此方法可用於執行任何有效的 SQL 語句。下面是使用 SQL 更改一條記錄的腳本更新句法。
dbc = create database connection("DSN=Excel Files; DBQ=c:\temp\suppliers.xlsx");
Execute sql(dbc, "SELECT * FROM `suppliers$` WHERE supplier_name = 'Google' ", "READIT"); //example extraction
Execute sql(dbc, "UPDATE `suppliers$`
SET supplier_id = 150,
supplier_name = 'Apple',
city = 'Cupertino'
WHERE supplier_name = 'Google'");
close database connection(dbc);
Before the SQL scriptBefore the SQL scriptSQL腳本之前
After the SQL Update - red box drawnAfter the SQL Update - red box drawnSQL 更新後 - 繪製的紅色框
請注意,格式不變。我無法證明數據庫更新與另一個表的性能,但係統更新通常非常快。 您可以在 Web 上搜索正確的 SQL 語法。 請注意,如果您對這種方法感興趣並且擁有 32 位 Microsoft Office,則需要幾個步驟來完成機器文件連接的一次性設置(我的機器與 Excel 的連接名為Excel文件).
這不是討論所有這些的論壇。 如果您需要,我們(作者)會寫一份補充文件。
從你上一篇文章來看,你似乎有一個 R 方法可以做你想做的事,所以我不打算回复,但決定關閉/替代方案以將另一種方法添加到組合中。
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎@ian_jmp ,
在您分享的示例中,您能否詳細說明如何使用 JSL 編輯 XML 中的值?
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎這是上一篇文章的多頁版本。 備註 JMP 12 僅允許將表格保存到單張 Excel 工作簿。JMP 13 啟用該功能創建 Excel 工作簿()但它需要一個 JMP 表名列表,而不是表引用。 JMP 14 允許打開的表名列表或表引用。
下面是它的工作原理:
- 保存附件文件 multi_tblFmt.txt到存儲多次使用的程序的路徑,將其重命名為具有擴展名 .vbs
- 如果您使用帶有 wscript 的 JMP 12 或更高版本(PC 不確定 MAC),請打開 JSL 文件創建ExcelTable_Style.jsl並根據需要更改 .vbs 文件和保存的 Excel 文件 (save_path) 的路徑名稱。
有趣的是,JMP 使用的 Excel 模板用於:
- JMP v12 和 JMP v13,TableStyleMedium6 是淺綠色,TableStyleMedium2 是藍色。
- JMP v14 TableStyleMedium6 為藍色。
使用記事本編輯 .vbs 文件以指定您喜歡的樣式。 (在 Excel 中,主頁>格式>表格)。
最後注意事項:.vbs 文件包含一個“IF”代碼塊,可生成交互式消息。 如果以非交互方式運行此腳本,則應刪除或註釋掉此 if 塊。請參閱 .vbs 文件註釋。
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎這個回復不是為了@uday_guntupalli但對於博客來說,如果這個討論有追隨者,他們希望能夠以更令人愉快的格式在 Excel 中保存 JMP 表,其中列標題包含過濾器/切片器。 下面提供的解決方案僅適用於保存的簡單情況一.xlsx 文件中的 JMP 表。VBScript 代碼需要額外的代碼來查找所有工作表並創建一個 for 循環包裝器以在每個工作表上運行。 我不擅長 VBS,並從我的另一半那裡獲得了語法幫助。 如果有興趣,請發表評論,我們將擴展 VBScript。
下面是它的工作原理:
- 保存附件tblFmt.txt文件到存儲多次使用的程序的路徑,將其重命名為具有擴展名 .vbs
- 打開 JSL 文件創建ExcelTable_Style.jsl並根據需要更改 .vbs 和保存的 Excel 文件的路徑名
vbs代碼注意事項:
- 它應用內置的Excel TableStyleMedium6到第一張紙上的表格,該表格生成深藍色標題、交替的淺藍色和白色行以及列過濾器(切片器)。
- 頁眉字體更改為 Arial Black,大小 12,粗體
- 該表自動適應 EntireColumn。 這可能並非在所有情況下都有用。
通過修改此 JSL 片段中的路徑名稱,可以在任何 JSL 程序中調用此 VBS 代碼
dt << Save("c:/temp/Biggie Class.xlsx");
//command line syntax: wscript path\tblFmt.vbs 'path to excel workbook'
rp4 = RunProgram(Executable("wscript"),
Options({"c:\temp\tblFmt.vbs", "\!"c:\temp\biggie class.xlsx\!""}),
ReadFunction("text")
);
JMP 開發人員注意事項( @ian_jmp ) :我嘗試將 Book.xltx 設為我的默認 Excel 模板。 要么我沒有成功,要么 JMP 沒有使用它。 如果成功,我的 vbs 代碼就可以指定自定義表格樣式。A願望清單項,可能是 Create Excel Workbook() 的擴展,具有可選參數來指定 .xltx 模板文件,以及將應用要應用的自定義樣式的 TableStyle 名稱。我意識到進入 Excel 版本,64 位與 32 位 MicrosoftOffice 的問題等。這在我的列表中並不高,但似乎經常有 Excel 表格請求。
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎@gzmorgan0 ,
在簡化的示例中使用 VBA 似乎是合理的,但是在我的實際問題陳述中,我需要修改多個值並且我更願意在沒有 VBA 的情況下進行修改。 我能夠讓 R 代碼工作,我正在嘗試查看如何使用@ian_jmp建議也是如此。 但是,感謝您為我提供了另一種選擇。 聖誕節快樂。
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎@uday_guntupalli你的需求不清楚。如果您有一個與您提供的模板類似的模板,其中包含所有宏編碼和公式,並且您只需要更改幾個值,您可以學習一些 vbscript 命令並使用運行程序(見下文)。
附件是一個將 JMP 文件 Big Class 保存為 xslx 並更改一個單元格格式的腳本,以演示如何使用 JSL 對此進行編碼。
我不是 XML 模式專家,因此 Ian 的方法可能正是您所需要的。
JSL 更改本金、天數、利率和額外付款。
Names Default to Here(1);
cmdList={"Dim xlApp",
"\[Set xlApp = CreateObject("Excel.Application")]\",
"xlApp.Visible = True",
"\[xlApp.Workbooks.Open ("C:\TEMP\Loan Template.xlsx")]\",
"'Change the values in cells e3-e5, e9",
"\[xlApp.Range("E3").Select]\",
"\[xlApp.ActiveCell.Value = 10000]\",
"\[xlApp.Range("E4").Select]\",
"\[xlApp.ActiveCell.Value = .044]\",
"\[xlApp.Range("E5").Select]\",
"\[xlApp.ActiveCell.Value = 2]\",
"\[xlApp.Range("E9").Select]\",
"\[xlApp.ActiveCell.Value = 150]\",
"\[xlApp.ActiveWorkbook.SaveAs("C:\TEMP\Loan v2.xlsx")]\",
"xlApp.Quit"
};
vbsTxt = concat items(cmdList, "\!N"); //add new lines aka CR
Save Text File( "c:\temp\jj2.vbs" , vbsTxt);
rp4 = RunProgram(Executable("wscript"),
Options("c:\temp\jj2.vbs"),
ReadFunction("text")
);
Caption( "JuMP has Control", Font( "Arial Black" ), //u is added for spoken voice to say and not spelll JMP.
Font Size( 16 ),
Text Color( "red" ), Spoken(1)
);
wait(2);
Caption(Remove);
//look at the Excel file, the color coding is maintained for new payment schedule
回复:JMP 可以通過 JSL 支持 Excel 格式化嗎如果您在使用 R 時遇到問題,您可能會考慮另一種“僅 JMP”路線。 不確定這實際上有多可行。
Names Default To Here( 1 );
// .XLSX is a ZIP file
package = Open( "$DESKTOP/Loan Template.xlsx", zip );
// See what's in the package
dirlist = package << dir;
Print(dirlist);
// Get the XML
xml = package << read(dirlist[9]);
// Manipulate XML with JSL?
Print(xml);
// Update the package
package << Write(dirlist[9], xml );