Ciao,
Ho due problemi con il Crea cartella di lavoro Excel chiama uno script JMP e spero che qualcuno qui possa darmi qualche informazione.
sto correndo JMP Pro 15.2.1 sopra Windows 10 .Ho uno script che mantiene una coppia di tabelle invisibili (:: dt_wj e :: dt_ma di seguito) che vengono aggiornate dall'utente tramite una finestra dell'interfaccia utente non modale.Uno dei pulsanti in questa finestra dovrebbe generare una nuova cartella di lavoro Excel nella cartella TEMP dell'utente tramite il codice seguente:
::excelpath = Trim(<BR /> Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) )<BR />);<BR />temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path(temppath||filename,Absolute,Windows);
Try(
Create Excel Workbook(
filepath,
{::dt_wj,::dt_ma},
{"WJ","MA"}
);
,//else
Write("Failed to create workbook!\!N");
//Return(Empty());
);
If( !Is File( filepath||".xslx" ),
Write("File does not exist!\!N");
//Return(Empty());<BR />);
Write( "Opening with Excel..." );
Try(<BR /> Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) )<BR />,//else<BR /> Write( "Failed!!!\!N" );<BR /> //Return(filepath);<BR />);
Write( "Done.\!N" );<BR />//Return(filepath);Comportamento strano 1 : Quando eseguo il codice come scritto sopra ( è racchiuso in una funzione nel mio codice, da cui le istruzioni Return commentate ), supera il primo blocco Try ( dove chiama Crea cartella di lavoro Excel ) senza eseguire la clausola catch, tuttavia, la riga di codice successiva ( test È File ) restituisce 0.Quando controllo la cartella temporanea vedo che è stato creato un file temporaneo, ma il nome del file ha un "-" aggiunto prima dell'estensione: ad esempio " MAWJ259022-.xlsx '.Tuttavia, ancora più strano, se aggiusto il È File test per includere il trattino inspiegabile:
If( !Is File( filepath||"-.xslx" ),<BR /> Write(Eval Insert("File ^filepath||\!"-.xslx\!"^ does not exist!\!N"));<BR /> Return( Empty() );<BR />);Non riesce ancora, anche se posso vedere con i miei occhi una cartella di lavoro Excel da 5 KB con quel percorso file preciso come verificato tramite l'output del registro.
Comportamento strano 2 : Due delle colonne in una delle mie tabelle JMP contengono numeri ID grandi ( 12 e 16 cifre rispettivamente ) che si trovano nelle colonne Carattere in JMP ( poiché non sono realmente numeri ma identificatori ).Quando io ( manualmente per ora ) apri il file excel nella cartella temp, queste colonne vengono lette in Excel come Numeric o General, anche se la colonna nella tabella JMP da cui sto salvando è sicuramente Character / Nominal.Ciò è problematico poiché Excel non è in grado di gestire il numero di 16 cifre e tronca le ultime 2 cifre e converte il numero di 12 cifre in notazione scientifica, rendendo inutili entrambi gli identificatori.Mi sembra che se JMP sta generando il file excel stesso, dovrebbe essere in grado di impostare il tipo di dati per la colonna Excel in modo che corrisponda al tipo di dati JMP-analogico più vicino nel processo.
Ho provato ad aggirare questo problema generando file CSV temporanei per ciascuna tabella di dati e quindi riportandoli in JMP tramite Carica file di testo , regolando le colonne per leggere varie combinazioni di Inserisci valutazione ( "= TEXT (^ regexresult [1] ^, \!" ############ \! ")" ) o Inserisci valutazione ( "= '^ regexresult [1] ^") o anche cose strane che ho trovato sulla gestione CSV di Excel come provare le virgolette doppie triplicate nei dati della colonna.Niente di tutto questo sembra portarmi in giro per eccellere nel tentativo di categorizzare automaticamente i miei dati e rovinarli, quindi spero davvero che ci sia un modo per fare in modo che JMP lo faccia nel modo giusto.
C'è un terzo comportamento Vorrei eludere, vale a dire che JMP non risponde fino a quando non si esce dall'istanza di Excel avviata con Esegui programma, ma sospetto che sia un problema più grande da risolvere e la sua risoluzione è secondaria rispetto al mio obiettivo principale qui.
Qualsiasi intuizione o commento / suggerimento sulle cose da provare sarebbe molto apprezzato, grazie!
Il tag script ha alterato parte di quel codice a causa dello stile di commento nelle istruzioni try & if, ripubblicato di seguito senza commenti per fornire codice funzionante.
::excelpath = Trim( Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) ) );
temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path( temppath || filename, Absolute, Windows );
Try(
Create Excel Workbook( filepath, {::dt_wj, ::dt_ma}, {"WJ", "MA"} ),
Write( "Failed to create workbook!\!N" );
);
If( !Is File( filepath || ".xslx" ),
Write( "File does not exist!\!N" )
);
Write( "Opening with Excel..." );
Try( Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) ), Write( "Failed!!!\!N" ) );
Write( "Done.\!N" );