JMP può supportare la formattazione di Excel tramite JSLTutto,
Esaminando diversi post nella community sull'argomento, credo di conoscere la risposta alla mia domanda. Tuttavia, andrò comunque avanti e riassumerò il problema e vedrò se qualcun altro ha intrapreso questa strada.
Dichiarazione problema : genera una cartella di lavoro Excel in un modello precedentemente accettato e riconosciuto
Non per dibattito : Perché Excel è il formato scelto per l'output
Nel passare attraverso i seguenti post:
- 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 (e tutti i post di blog pertinenti sull'argomento)
- https://community.jmp.com/t5/Discovery-Summit-2016/Working-With-Excel-the-Advanced-Edition/ta-p/23969
Comprensibilmente ci si concentra molto su come importare ed esportare dati tra Excel e JMP. Tuttavia, nessuno di loro parla davvero di preservare/personalizzare il formato dei dati esportati da JMP ed Excel. Che ci piaccia o no, Excel esisterà ancora e ci sarà una continua necessità di presentare i nostri risultati tramite Excel (il minimo è che ogni utente non può avere una licenza JMP).
Dato questo background, ho un modello Excel e vorrei modificare alcuni dati nel modello Excel utilizzando JSL preferibilmente. Questo è l'ultimo passo di un'applicazione davvero grande che ho in JMP. Idealmente, tutto ciò di cui ho bisogno è che JMP modifichi i dati nel modello e salvi la cartella di lavoro. Sfortunatamente, come puoi aspettarti nel momento in cui apro il file in JMP, la formattazione va a rotoli e mi lascia con un formato confuso che non è realmente presentabile all'utente.
COSÌ,
1. Esiste un modo per utilizzare JSL non VBA per preservare la formattazione in un modello Excel e modificare i dati nel file?
2. Supponendo che la risposta alla mia domanda precedente sia "No", ho seguito il percorso dell'utilizzo del pacchetto "XLConnect" in R. Tuttavia, anche questo sta incontrando problemi. Non mi aspetto che la comunità JMP risponda a domande sul motivo per cui il pacchetto R non sta dando i risultati. Se qualcuno fosse interessato ad aiutare, il codice R è fornito di seguito.In allegato c'è anche un modello di esempio su cui sto sperimentando
# 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')
Re: JMP può supportare la formattazione di Excel tramite JSL?@uday_guntupalli esiste un'alternativa alla modifica di XML per modificare Excel e salvare la formattazione e le funzioni: utilizzare le funzioni JMP per trattare Excel come un database. L'ho fatto solo con fogli che hanno un layout di database, ovvero le colonne sono campi e le righe sono record.
Non sono un esperto di SQL, ma puoi trovare la documentazione sull'aggiornamento di molti record del database con una tabella. Fornirò un semplice esempio.
Di seguito è riportata un'immagine di un semplice file Excel con due fogli e con formattazione.Il file è chiamato fornitori.xlsx e viene nominato il foglio da aggiornare fornitori . Il libro Compagno JSL, 2a edizione , documenta tre metodi ODBC di JMP: Apri banca dati() , Nuova query SQL() e uno degli autori ha chiamato un metodo in 3 fasi.

Questo metodo può essere utilizzato per eseguire qualsiasi istruzione SQL valida.Di seguito è riportato lo script per modificare un record utilizzando SQL AGGIORNAMENTO sintassi.
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 scriptPrima dello script SQL
After the SQL Update - red box drawnAfter the SQL Update - red box drawn Dopo l'aggiornamento SQL - casella rossa disegnata
Si noti che la formattazione è invariata.Non posso attestare le prestazioni di un AGGIORNAMENTO del database con un'altra tabella, ma gli aggiornamenti di sistema sono in genere piuttosto veloci. Puoi fare una ricerca sul web per la sintassi SQL corretta. Nota se sei interessato a questo metodo e hai Microsoft Office a 32 bit, sono necessari un paio di passaggi per completare l'installazione una tantum della connessione Machine File (la mia connessione macchina a Excel è denominata File Excel ).
Questo non è il forum per discutere di tutto ciò. Noi (autori) abbiamo scritto un documento supplementare se richiesto.
Dal tuo ultimo post, sembra che tu abbia un metodo R per fare quello che vuoi, quindi non avevo intenzione di rispondere, ma ho deciso per chiusura/alternative di aggiungere un altro metodo nel mix.
Ri: JMP può supportare la formattazione di Excel tramite JSL?@ian_jmp ,
Nell'esempio che hai condiviso, potresti gentilmente approfondire come si potrebbero modificare i valori in XML usando JSL?
Ri: JMP può supportare la formattazione di Excel tramite JSL?Ecco la versione multifoglio, per il post precedente. Nota JMP 12 consente solo di salvare una tabella in una cartella di lavoro Excel a foglio singolo.JMP 13 ha abilitato la funzione Crea cartella di lavoro Excel() ma richiedeva un elenco di nomi di tabelle JMP, non i riferimenti alle tabelle. JMP 14 consente un elenco di nomi di tabelle aperte o riferimenti di tabelle.
Ecco come funziona:
- salvare l'allegato file multi_tblFmt.txt in un percorso in cui memorizzi i programmi che usi molte volte, rinominalo per avere l'estensione .vbs
- Se stai utilizzando JMP 12 o successivo con wscript (un PC non è sicuro di un MAC), apri il file JSL CreateExcelTable_Style.jsl e modificare i nomi dei percorsi per il file .vbs e il file Excel salvato (save_path), se necessario.
È interessante notare che il modello Excel utilizzato da JMP per:
- JMP v12 e JMP v13, TableStyleMedium6 è un colore acqua e TableStyleMedium2 è blu.
- JMP v14 il TableStyleMedium6 è blu.
Modifica il file .vbs con Blocco note per specificare lo stile che preferisci. ( In Excel, Home >Formato>Tabella ).
Nota finale: il file .vbs contiene un blocco di codice "IF" che produce un messaggio interattivo. Se si esegue questo script in modo non interattivo, questo blocco dovrebbe essere rimosso o commentato.Vedere il commento del file .vbs.
Ri: JMP può supportare la formattazione di Excel tramite JSL?Questa risposta non è tanto per @uday_guntupalli ma per il blog nel caso in cui questa discussione abbia follower che vorrebbero poter salvare una tabella JMP in Excel con un formato più piacevole in cui le intestazioni delle colonne contengono filtri/affettatrici. La soluzione fornita di seguito funziona solo nel semplice caso di salvataggio uno Tabella JMP in un file .xlsx.Il codice VBScript avrebbe bisogno di codice aggiuntivo per trovare tutti i fogli e creare un wrapper ciclo for da eseguire su ogni foglio. Non sono bravo con VBS e ho chiesto aiuto alla sintassi della mia dolce metà. Se c'è interesse, posta un commento e noi estenderemo il VBSCript.
Ecco come funziona:
- salvare il file allegato tblFmt.txt in un percorso in cui memorizzi i programmi che usi molte volte, rinominalo per avere l'estensione .vbs
- aprire il file JSL CreateExcelTable_Style.jsl e modificare i nomi dei percorsi per .vbs e il file Excel salvato, se necessario
Elementi da notare riguardo al codice vbs:
- Applica l'Excel integrato TableStyleMedium6 alla tabella sul primo foglio che produce intestazioni blu scuro, alternando righe azzurre e bianche e filtri di colonna (affettatrici).
- Il carattere dell'intestazione viene modificato in Arial Black, dimensione 12, grassetto
- La tabella si adatta automaticamente all'intera colonna. Questo potrebbe non essere utile in tutti i casi.
Questo codice VBS può essere richiamato in qualsiasi programma JSL modificando i nomi dei percorsi in questo frammento JSL
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")
);
Nota per gli sviluppatori JMP ( @ian_jmp
ho provato a rendere Book.xltx il mio modello Excel predefinito. O non ho avuto successo o JMP non lo utilizza. In caso di successo, il mio codice vbs avrebbe potuto specificare uno stile di tabella personalizzato.UN Lista dei desideri item, potrebbe essere un'estensione di Create Excel Workbook() per avere argomenti facoltativi per specificare il file modello .xltx e il nome TableStyle che applicherebbe uno stile personalizzato da applicare.Mi rendo conto che entra nelle versioni di Excel, il problema di MicrosoftOffice a 64 o 32 bit, ecc. Questo non è in cima alla mia lista, ma sembra che ci siano frequenti richieste di tabelle Excel.
Re: JMP può supportare la formattazione di Excel tramite JSL?@gzmorgan0 ,
L'uso di VBA nell'esempio semplificato sembra ragionevole, tuttavia nella mia attuale dichiarazione del problema, avrei bisogno di modificare più valori e preferirei farlo senza VBA. Sono stato in grado di far funzionare il codice R e sto cercando di vedere come lavorarci @ian_jmp suggerimento pure. Tuttavia, grazie per avermi fornito un'altra opzione. Buon Natale.
Ri: JMP può supportare la formattazione di Excel tramite JSL?@uday_guntupalli le tue esigenze non sono chiare.Se hai un modello come quello che hai fornito che ha tutti i codici macro e le formule e devi solo modificare alcuni valori, puoi imparare alcuni comandi vbscript e usare Esegui programma (vedi sotto).
In allegato c'è uno script che salva il file JMP Big Class come xslx e cambia il formato su una cella, per dimostrare come potresti codificarlo usando JSL.
Non sono un esperto di schemi XML, quindi l'approccio di Ian potrebbe essere ciò di cui hai bisogno.
JSL per modificare il capitale, il numero di giorni, il tasso di interesse e il pagamento extra.
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
Ri: JMP può supportare la formattazione di Excel tramite JSL?Se riscontri problemi con R, potresti prendere in considerazione un percorso alternativo "solo JMP". Non sono sicuro di quanto sarebbe effettivamente fattibile.
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 );