Importieren Sie Excel-Daten aus bestimmten Excel-ZellenIch habe eine Situation, in der die Daten, die ich in JMP analysieren muss, etwas willkürlich in einer Excel-Datei gespeichert sind.Glücklicherweise kann ich leicht eine Liste der Excel-Zellen erhalten, in denen sich die Daten befinden, und ich möchte den Import dieser Werte mit JSL automatisieren.Ich suche nach Ideen, wie ich dies effektiv und effizient umsetzen kann.
Nehmen wir zum Beispiel an, dass die Daten, die ich in einer einzelnen Spalte in JMP benötige, in diesen Excel-Zellen gespeichert sind
E284, E400, E507, D615, E727, D852, E1003, E1114, D1220, D1339, E1493
Ich habe versucht, Open() zu verwenden und das Arbeitsblatt, Startzeile, Endzeile, Startspalte, Endspalte anzugeben, um einfach jeden Wert in einer JMP-Datei mit einer einzelnen Zeile/Spalte zu erhalten, z. B
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( "-" )
)
)
Ich würde dann für jeden Wert, den ich aus einer bestimmten Zelle abrufen möchte, eine separate Datendatei erhalten und dann die Werte in den separaten JMP-Dateien alle zusammen in einer Datentabelle in einer Spalte zusammenfassen.
Ein Problem, mit dem ich konfrontiert bin, besteht darin, dass beim Öffnen einer Excel-Datei anscheinend alle leeren Zeilen oben im Excel-Arbeitsblatt ignoriert werden.Zeile 1 ist also nicht wirklich Zeile 1, es sei denn, Zeile 1 enthält einige Daten. Stimmt das?
Alle anderen Ideen wären hilfreich.
DatenzugriffBetreff: Excel-Daten aus bestimmten Excel-Zellen importierenIch habe in Excel eine einfachere Lösung gefunden.In Excel gibt es die Funktion INDIRECT(cellref), mit der Sie ein Ergebnis aus einer bestimmten Zelle erhalten.So konnte ich eine neue Excel-Tabelle erstellen und Spalten erstellen, die das Blatt und die Zelle angeben, in der sich die Daten befinden, und mithilfe der INDIRECT-Funktion eine Ergebnistabelle erhalten, die ich für die Analyse benötigte.
Ich denke jedoch, dass dieses Problem einige Verbesserungen hervorhebt, die für den Excel-Import in JMP erforderlich sind.
Betreff: Excel-Daten aus bestimmten Excel-Zellen importierenHier ist ein Beispiel (wahrscheinlich bessere Möglichkeiten zum Parsen von XML, aber Mustervergleichsfunktionen erledigen die Arbeit für mich:
/*----------------------------------------------------------------------
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>Betreff: Excel-Daten aus bestimmten Excel-Zellen importierenDas ist eine interessante Idee.Ich hatte keine Ahnung, dass sich das „unter der Haube“ einer XLSX-Datei befand.
Betreff: Excel-Daten aus bestimmten Excel-Zellen importierenDies ist ein etwas extremer Hack, obwohl ich ähnliche Techniken verwende, um PPTX- und DOC-Dateien zu erstellen ...
XLSX ist lediglich eine ZIP-Datei, die XML-Dateien enthält.Sie können das XML verwenden, um auf Zellkoordinaten zu verweisen:

Sie können ZipArchive verwenden, um an die XML-Dateien zu gelangen.
Betreff: Excel-Daten aus bestimmten Excel-Zellen importierenIch habe mich gerade daran erinnert, dass diese Zeilen bei einem Excel-Arbeitsblatt mit leeren Zellen oben im Blatt tatsächlich ignoriert werden.Sehen https://www.jmp.com/support/notes/60/026.html
Und Verbesserung des Excel-Imports: Zeilennummern und Spaltenbeschriftungen in der Importvorschau anzeigen
Betreff: Excel-Daten aus bestimmten Excel-Zellen importierenDie einfache Antwort lautet „Nein“.Wenn es eine andere Möglichkeit gäbe, den Speicherort der Daten zu referenzieren, würde ich Ihren Ansatz ausprobieren, aber in diesem Fall ist die Excel-Zellenreferenz die primäre Möglichkeit, die Daten zu finden.
Betreff: Excel-Daten aus bestimmten Excel-Zellen importierenVerfügen Sie über andere Informationen als die Excel-Zellenreferenz, die Sie zur Identifizierung der Zellen verwenden können?Zum Beispiel vielleicht eine Feldbezeichnung?Normalerweise lade ich die Daten mit minimalem Verarbeitungsaufwand aus Excel in JMP und iteriere dann einfach über Zeilen und Spalten, um nach wichtigen Informationen zu suchen.Normalerweise wird beim ersten Scan die Spalte identifiziert, die die für mich interessanten Feldbeschriftungen enthält, und beim zweiten Scan werden dann die Feldwerte geladen.Auf diese Weise kann ich entweder Datenlisten erstellen, aus denen ich eine Tabelle erstellen kann, oder Header-Informationen, die ich als Tabellenvariablen festlegen kann.
Beispiel: Scannen, um eine Spalte zu finden, die eine bestimmte Feldbezeichnung enthält
identifier = "Description";
cols = dt<<GETCOLUMNNAMES> </GETCOLUMNNAMES>
Und dann nach Feldern suchen
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()
)
)
);