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 abrufen, in denen sich die Daten befinden, und ich möchte den Import dieser Werte mit JSL automatisieren.Ich suche nach Ideen, wie man dies effektiv und effizient tun kann.
Angenommen, die Daten, die ich in einer einzelnen Spalte in JMP benötige, werden in diesen Excel-Zellen gespeichert
E284, E400, E507, D615, E727, D852, E1003, E1114, D1220, D1339, E1493
Ich habe versucht, Open() zu verwenden und das Arbeitsblatt anzugeben, Startzeile, Endzeile, Startspalte, Endspalte, um nur jeden Wert in einer JMP-Datei mit einer einzelnen Zeile/Spalte zu erhalten, z
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 eine separate Datendatei für jeden Wert erhalten, den ich aus einer bestimmten Zelle abrufen möchte, und dann die Werte in den separaten JMP-Dateien alle zusammen in einer Datentabelle in einer Spalte sammeln.
Ein Problem, mit dem ich konfrontiert bin, ist, 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 Daten. Stimmt das?
Alle anderen Ideen wären hilfreich.
SkripterstellungBetreff: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenIch habe eine einfachere Problemumgehung in Excel gefunden.In Excel gibt es eine INDIREKT(Zellref)-Funktion, die Sie verwenden, um ein Ergebnis aus einer bestimmten Zelle zu erhalten.So konnte ich ein neues Excel-Blatt erstellen und Spalten erstellen, die das Blatt und die Zelle angeben, in denen sich die Daten befinden, und die INDIREKT-Funktion verwenden, um eine Tabelle mit Ergebnissen zu 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: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenHier ist ein Beispiel (wahrscheinlich bessere Möglichkeiten zum Analysieren 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: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenDas ist eine interessante Idee.Ich hatte keine Ahnung, was sich hinter einer XLSX-Datei verbirgt.
Betreff: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenDies ist ein etwas extremer Hack, obwohl ich ähnliche Techniken verwende, um PPTX- und DOC-Dateien zu erstellen ...
XLSX ist nur eine ZIP-Datei, die XML-Dateien enthält.Sie können das XML verwenden, um Zellkoordinaten zu referenzieren:

Sie können ZipArchive verwenden, um an die XML-Dateien zu gelangen.
Betreff: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenIch habe mich gerade daran erinnert, dass diese Zeilen bei einem Excel-Arbeitsblatt mit leeren Zellen am oberen Rand des Blatts 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: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenEinfache Antwort ist "nein".Wenn es eine andere Möglichkeit gäbe, auf den Speicherort der Daten zu verweisen, würde ich Ihren Ansatz ausprobieren, aber in diesem Fall ist die Excel-Zellreferenz der primäre Weg, um die Daten zu finden.
Betreff: Importieren Sie Excel-Daten aus bestimmten Excel-ZellenHaben Sie Informationen, die Sie verwenden können, um die anderen Zellen als den Excel-Zellbezug zu identifizieren?Zum Beispiel vielleicht eine Feldbezeichnung?Normalerweise lade ich die Daten aus Excel mit minimaler Verarbeitung in JMP und iteriere dann einfach über Zeilen und Spalten, um nach Schlüsselinformationen zu suchen.Normalerweise identifiziert der erste Scan die Spalte, die die Feldbezeichnungen enthält, die mich interessieren, und der zweite Scan lädt dann die Feldwerte.Auf diese Weise kann ich entweder Datenlisten aufbauen, aus denen ich eine Tabelle erstellen kann, oder Kopfinformationen, die ich als Tabellenvariablen festlegen kann.
Zum 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()
)
)
);