Kann JMP die Excel-Formatierung über JSL unterstützen?Alle,
Nachdem ich verschiedene Beiträge in der Community zu diesem Thema durchgesehen habe, glaube ich, die Antwort auf meine Frage zu kennen. Ich werde jedoch weitermachen und das Problem zusammenfassen und sehen, ob jemand anderes diesen Weg eingeschlagen hat.
Problemstellung : Generieren Sie eine Excel-Arbeitsmappe in einer zuvor akzeptierten und erkannten Vorlage
Nicht zur Debatte : Warum ist Excel das gewählte Ausgabeformat?
Beim Durchgehen der folgenden Beiträge:
- 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 (und alle relevanten Blogbeiträge zum Thema)
- https://community.jmp.com/t5/Discovery-Summit-2016/Working-With-Excel-the-Advanced-Edition/ta-p/23969
Verständlicherweise liegt ein großer Fokus darauf, wie Daten zwischen Excel und JMP importiert und exportiert werden. Keiner von ihnen spricht jedoch wirklich über die Beibehaltung/Anpassung des Formats der Daten, die aus JMP und Excel exportiert werden. Ob es uns gefällt oder nicht, Excel wird es immer noch geben und es wird einen kontinuierlichen Bedarf geben, unsere Ergebnisse über Excel zu präsentieren (was am wenigsten bedeutet, dass nicht jeder Benutzer eine JMP-Lizenz haben kann).
Vor diesem Hintergrund habe ich eine Excel-Vorlage und möchte einige Daten in der Excel-Vorlage bearbeiten JSL vorzugsweise. Dies ist der letzte Schritt einer wirklich großen Anwendung, die ich in JMP habe. Im Idealfall muss JMP nur die Daten in der Vorlage bearbeiten und die Arbeitsmappe speichern. Leider geht die Formatierung, wie Sie erwarten können, in dem Moment, in dem ich die Datei in JMP öffne, durcheinander und hinterlässt ein verstümmeltes Format, das für den Benutzer nicht wirklich präsentabel ist.
So,
1. Gibt es eine Möglichkeit, JSL und nicht VBA zu verwenden, um die Formatierung in einer Excel-Vorlage beizubehalten und die Daten in der Datei zu bearbeiten?
2. Angenommen, die Antwort auf meine vorherige Frage lautet "Nein", bin ich den Weg gegangen, das Paket "XLConnect" in R zu verwenden. Allerdings stößt auch das auf Probleme. Ich erwarte nicht, dass die JMP-Community Fragen beantwortet, warum das R-Paket nicht die Ergebnisse liefert. Sollte jemand daran interessiert sein, zu helfen, finden Sie unten den R-Code.Ebenfalls beigefügt ist eine Beispielvorlage, an der ich experimentiere
# 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')
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?@uday_guntupalli Es gibt eine Alternative zum Bearbeiten von XML, um Excel zu bearbeiten und Formatierungen und Funktionen zu speichern: Verwenden Sie JMP-Funktionen, um Excel als Datenbank zu behandeln. Ich habe dies nur mit Blättern gemacht, die ein Datenbanklayout haben, dh Spalten sind Felder und Zeilen sind Datensätze.
Ich bin kein SQL-Experte, aber Sie können eine Dokumentation zum Aktualisieren vieler Datenbankeinträge mit einer Tabelle finden. Ich werde ein einfaches Beispiel geben.
Unten ist ein Bild einer einfachen Excel-Datei mit zwei Blättern und mit Formatierung.Die Datei wird aufgerufen Lieferanten.xlsx und das zu aktualisierende Blatt wird benannt Lieferanten . Das Buch JSL-Begleiter, 2. Auflage , dokumentiert drei JMP ODBC-Methoden: Datenbank öffnen() , Neue SQL-Abfrage() und eine der Autoren nannte eine 3-Stufen-Methode.

Mit dieser Methode kann jede gültige SQL-Anweisung ausgeführt werden.Unten ist das Skript zum Ändern eines Datensatzes mit SQL AKTUALISIEREN Syntax.
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 scriptVor dem SQL-Skript
After the SQL Update - red box drawnAfter the SQL Update - red box drawn Nach dem SQL-Update - rotes Kästchen gezeichnet
Beachten Sie, dass die Formatierung unverändert bleibt.Ich kann die Leistung eines Datenbank-UPDATE mit einer anderen Tabelle nicht bestätigen, aber Systemaktualisierungen sind normalerweise ziemlich schnell. Sie können eine Websuche nach der richtigen SQL-Syntax durchführen. Beachten Sie, wenn Sie an dieser Methode interessiert sind und 32-Bit-Microsoft Office verwenden, sind einige Schritte erforderlich, um die einmalige Einrichtung der Maschinendateiverbindung abzuschließen (meine Maschinenverbindung zu Excel heißt Excel-Dateien ).
Dies ist nicht das Forum, um all das zu diskutieren. Wir (Autoren) haben ein ergänzendes Dokument geschrieben, wenn Sie es anfordern.
Aus Ihrem letzten Beitrag geht hervor, dass Sie eine R-Methode haben, mit der Sie tun können, was Sie wollen, also wollte ich nicht antworten, sondern entschied mich für Schließungen/Alternativen, um eine weitere Methode in den Mix aufzunehmen.
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?@ian_jmp ,
Könnten Sie in dem von Ihnen geteilten Beispiel bitte erläutern, wie man die Werte in XML mit JSL bearbeiten kann?
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?Hier ist die Multi-Sheet-Version für den vorherigen Beitrag. Hinweis JMP 12 erlaubt nur das Speichern einer Tabelle in einer Excel-Arbeitsmappe mit einem einzelnen Blatt.JMP 13 hat die Funktion aktiviert Excel-Arbeitsmappe erstellen() aber es erforderte eine Liste von JMP-Tabellennamen, nicht die Tabellenreferenzen. JMP 14 erlaubt entweder eine Liste der geöffneten Tabellennamen oder Tabellenreferenzen.
So funktioniert es:
- speichere den Anhang Datei multi_tblFmt.txt in einen Pfad, in dem Sie Programme speichern, die Sie oft verwenden, benennen Sie ihn um, sodass er die Erweiterung .vbs hat
- Wenn Sie JMP 12 oder höher mit wscript verwenden (ein PC, der sich bei einem MAC nicht sicher ist), öffnen Sie die JSL-Datei CreateExcelTable_Style.jsl und ändern Sie bei Bedarf die Pfadnamen für die .vbs-Datei und die gespeicherte Excel-Datei (save_path).
Es ist interessant festzustellen, dass die Excel-Vorlage, die JMP verwendet für:
- JMP v12 und JMP v13, TableStyleMedium6 ist Aqua und TableStyleMedium2 ist Blau.
- JMP v14 der TableStyleMedium6 ist Blau.
Bearbeiten Sie die .vbs-Datei mit Notepad, um den gewünschten Stil anzugeben. (In Excel, Startseite > Format > Tabelle).
Schlussbemerkung: Die .vbs-Datei enthält einen „IF“-Codeblock, der eine interaktive Nachricht erzeugt. Wenn dieses Skript nicht interaktiv ausgeführt wird, sollte dieser if-Block entfernt oder auskommentiert werden.Siehe Kommentar zur .vbs-Datei.
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?Diese Antwort ist nicht so sehr für @uday_guntupalli aber für den Blog, falls diese Diskussion Anhänger hat, die gerne eine JMP-Tabelle in Excel mit einem angenehmeren Format speichern können, in dem die Spaltenüberschriften Filter/Slicer enthalten. Die unten angegebene Lösung funktioniert nur im einfachen Fall des Speicherns eins JMP-Tabelle in einer .xlsx-Datei.Der VBScript-Code würde zusätzlichen Code benötigen, um alle Blätter zu finden und einen for-Schleifen-Wrapper zu erstellen, der auf jedem Blatt ausgeführt wird. Ich bin nicht gut in VBS und nehme Syntaxhilfe von meiner besseren Hälfte in Anspruch. Wenn Interesse besteht, posten Sie einen Kommentar und wir erweitern den VBSCript.
So funktioniert es:
- Speichern Sie die angehängte Datei tblFmt.txt in einen Pfad, in dem Sie Programme speichern, die Sie oft verwenden, benennen Sie ihn um, sodass er die Erweiterung .vbs hat
- Öffnen Sie die JSL-Datei CreateExcelTable_Style.jsl und ändern Sie bei Bedarf die Pfadnamen für .vbs und die gespeicherte Excel-Datei
Zu beachtende Punkte bezüglich des vbs-Codes:
- Es wendet das eingebaute Excel an TableStyleMedium6 zur Tabelle auf dem ersten Blatt, das dunkelblaue Kopfzeilen, abwechselnd hellblaue und weiße Zeilen und Spaltenfilter (Slicer) erzeugt.
- Die Schriftart der Kopfzeile wird in Arial Black, Größe 12, fett geändert
- Die Tabelle wird automatisch an die gesamte Spalte angepasst. Dies ist möglicherweise nicht in allen Fällen sinnvoll.
Dieser VBS-Code kann in jedem JSL-Programm aufgerufen werden, indem die Pfadnamen in diesem JSL-Snippet geändert werden
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")
);
Hinweis für JMP-Entwickler ( @ian_jmp ) : Ich habe versucht, Book.xltx zu meiner Standard-Excel-Vorlage zu machen. Entweder war ich nicht erfolgreich, oder JMP verwendet es nicht. Bei Erfolg hätte mein vbs-Code einen benutzerdefinierten Tabellenstil angeben können.A Wunschzettel item, könnte eine Erweiterung von Create Excel Workbook() sein, um optionale Argumente zum Angeben der .xltx-Vorlagendatei und des TableStyle-Namens zu haben, der einen anzuwendenden benutzerdefinierten Stil anwenden würde.Mir ist klar, dass in Excel-Versionen das Problem von 64-Bit-MicrosoftOffice im Vergleich zu 32-Bit-MicrosoftOffice usw. auftaucht. Dies steht nicht ganz oben auf meiner Liste, aber es scheint häufig Anfragen nach Excel-Tabellen zu geben.
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?@gzmorgan0 ,
Die Verwendung von VBA im vereinfachten Beispiel erscheint vernünftig, aber in meiner eigentlichen Problemstellung müsste ich mehrere Werte ändern und würde es vorziehen, dies ohne VBA zu tun. Ich konnte den R-Code zum Laufen bringen und versuche zu sehen, wie ich damit arbeiten kann @ian_jmp auch Vorschlag. Vielen Dank jedoch, dass Sie mir eine weitere Option zur Verfügung gestellt haben. Frohe Weihnachten.
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?@uday_guntupalli Ihre Bedürfnisse sind nicht klar.Wenn Sie eine Vorlage wie die von Ihnen bereitgestellte haben, die alle Makrocodierungen und Formeln enthält, und Sie nur einige Werte ändern müssen, können Sie einige vbscript-Befehle lernen und Run Program verwenden (siehe unten).
Angehängt ist ein Skript, das die JMP-Datei Big Class als xslx speichert und das Format einer Zelle ändert, um zu demonstrieren, wie Sie dies mit JSL codieren können.
Ich bin kein Experte für XML-Schemas, daher könnte Ians Ansatz das sein, was Sie brauchen.
JSL, um den Kapitalbetrag, die Anzahl der Tage, den Zinssatz und die zusätzliche Zahlung zu ändern.
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
Betreff: Kann JMP die Excel-Formatierung über JSL unterstützen?Wenn Sie Probleme mit R haben, sollten Sie eine alternative „Nur JMP“-Route in Betracht ziehen. Ich bin mir nicht sicher, wie praktikabel dies tatsächlich wäre.
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 );