Importa i dati di Excel da specifiche celle di ExcelHo una situazione in cui i dati che devo analizzare in JMP sono archiviati in modo piuttosto casuale in un file Excel.Fortunatamente posso ottenere facilmente un elenco delle celle di Excel in cui si trovano i dati e vorrei automatizzare con JSL importando quei valori.Sto cercando idee su come farlo in modo efficace ed efficiente.
Ad esempio, supponiamo che i dati di cui ho bisogno in una singola colonna in JMP siano archiviati in queste celle di Excel
E284, E400, E507, D615, E727, D852, E1003, E1114, D1220, D1339, E1493
Ho provato a utilizzare Open() e a specificare il foglio di lavoro, riga iniziale, riga finale, colonna iniziale, colonna finale per ottenere semplicemente ogni valore in un file JMP con una singola riga/colonna, ad es.
Open(
"C:\temp\worksheet.xlsx",
Worksheets( "sheet1" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 284 ), // get data on row 284
Data Starts on Column( 5 ), // get data on column "E" (the fifth column)
Data Ends on Row( 284 ), // get data on row 284
Data Ends on Column( 5 ), // get data on column "E" (the fifth column)
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
Otterrei quindi un file di dati separato per ogni valore che desidero recuperare da una cella specifica e quindi raccogliere i valori nei file JMP separati tutti insieme in una tabella di dati in una colonna.
Un problema che sto affrontando è che sembra che quando si apre un file excel, tutte le righe vuote nella parte superiore del foglio di lavoro excel vengono ignorate?Quindi la riga 1 non è realmente la riga 1 a meno che non ci siano dei dati nella riga 1. È vero?
Qualsiasi altra idea sarebbe utile.
SceneggiaturaRe: Importa dati Excel da specifiche celle di ExcelHo trovato una soluzione più semplice in Excel.C'è una funzione INDIRETTO(cellref) in Excel che usi per ottenere un risultato da una cella specifica.Quindi sono stato in grado di creare un nuovo foglio Excel e creare colonne che indicano il foglio e la cella in cui si trovano i dati e utilizzare la funzione INDIRETTO per ottenere una tabella di risultati di cui avevo bisogno per l'analisi.
Penso, tuttavia, che questo problema evidenzi alcuni miglioramenti necessari per l'importazione di Excel in JMP.
Re: Importa dati Excel da specifiche celle di ExcelEcco un esempio (probabilmente modi migliori per analizzare XML ma le funzioni di corrispondenza dei modelli fanno il lavoro per me:
/*----------------------------------------------------------------------
Method: getWorksheets
----------------------------------------------------------------------*/
getWorksheets = method({username=1},
// this technique (including the overhead of creating the class,
// is >300 x faster than getExcelWorksheets on Mac
// and >100 x faster on Windows
workbook = "xl/workbook.xml";
za = open(_excelFilePath,zip);
contents = za<<READ>>sheet + "\!""
+ " sheetId=\!"" + PatRepeat(PatNotAny("\!"")) + "\!""
+ (" r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"" | " state=\!"hidden\!"" + " r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"")>>x;
ismatch = 1;
lstWorksheets = {};
while(ismatch,
ismatch = patmatch(contents,pat,"");
if (!contains(x,"hidden"),
substituteinto(sheet,"&","&");
if (!contains(lstWorksheets,sheet),
insertinto(lstWorksheets,sheet)
)
)
);
return(lstWorksheets);
),</READ>Re: Importa dati Excel da specifiche celle di ExcelÈ un'idea interessante.Non avevo idea che fosse ciò che era "sotto il cofano" di un file XLSX.
Re: Importa dati Excel da specifiche celle di ExcelQuesto è un hack leggermente estremo, anche se utilizzo tecniche simili per creare file PPTX e DOC ...
XLSX è solo un file zip contenente file XML.È possibile utilizzare l'XML per fare riferimento alle coordinate della cella:

È possibile utilizzare ZipArchive per accedere ai file XML.
Re: Importa dati Excel da specifiche celle di ExcelMi sono appena ricordato che, sì, in effetti, per un foglio di lavoro Excel con celle vuote nella parte superiore del foglio, quelle righe vengono ignorate.Vedere https://www.jmp.com/support/notes/60/026.html
e Miglioramento dell'importazione di Excel: mostra i numeri di riga e le etichette delle colonne nell'anteprima di importazione
Re: Importa dati Excel da specifiche celle di ExcelLa risposta semplice è "no".Se avessi un altro modo per fare riferimento alla posizione dei dati, proverei il tuo approccio, ma in questo caso il riferimento alla cella di Excel è il modo principale per trovare i dati.
Re: Importa dati Excel da specifiche celle di ExcelHai informazioni che puoi utilizzare per identificare le celle diverse dal riferimento di cella di Excel.Ad esempio, forse un'etichetta di campo?Di solito carico i dati da Excel in JMP con un'elaborazione minima, quindi ripeto semplicemente su righe e colonne alla ricerca di informazioni chiave.In genere la prima scansione identificherà la colonna che contiene le etichette dei campi che mi interessano e la seconda scansione caricherà i valori dei campi.In questo modo posso creare elenchi di dati da cui costruire una tabella o informazioni di intestazione che posso impostare come variabili di tabella.
Ad esempio, scansione per trovare una colonna contenente un'etichetta di campo specifica
identifier = "Description";
cols = dt<<GETCOLUMNNAMES> </GETCOLUMNNAMES>
E poi la scansione dei campi
fields = [=>];
fields["Description"] = 0;
fields["USL"] = 0;
fields["LSL"] = 0;
fields["Nominal"] = 0;
keys = fields << getKeys;
for (i=1,i<=nitems(keys),i++,
field = keys[i];
success = 0;
for (r=1,r<=nrow(dt),r++,
cell = column(dt,lblCol)[r];
if (contains(cell,field),
success = 1;
fields[field] = r;
break()
)
)
);