Umgang mit zwei verschiedenen Excel-HeaderformatenHallo zusammen,
Ich arbeite an einem JSL-Skript in JMP, um den Import von Stücklisten-Excel-Dateien zu automatisieren. Diese Dateien stammen aus unterschiedlichen Quellen und folgen leider keinem einheitlichen Format.
Ich beschäftige mich mit zwei spezifischen Formaten:
- Format 1: Überschriften stehen in Zeile 5, Daten beginnen in Zeile 6
- Format 2: Überschriften stehen in Zeile 6, Daten beginnen in Zeile 7
Momentan ist in meinem Skript die Verwendung von Format 1 (Kopfzeilen beginnen in Zeile (5)) fest codiert, ich muss es jedoch jedes Mal manuell anpassen, wenn ich Dateien im Format 2 empfange.
Ziel: Ich möchte das Skript intelligent genug machen, um automatisch das richtige Format zu erkennen und die entsprechenden Importeinstellungen (Kopfzeilen beginnen in Zeile, Daten beginnen in Zeile) anzuwenden, ohne dass ein manueller Eingriff erforderlich ist.
Hier ist ein Ausschnitt aus dem aktuellen Skript:
For( i = 1, i <= N Items (namefiles), i++,
//Transformation du fichier en table de données
dt = Open(
namefiles[i],
Worksheets( "BOM" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 5 ),
Data Starts on Row( 6 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
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( "-" )
)
);<BR />...<BR />...<BR />...
Hat jemand ein ähnliches Problem? Ich suche:
- Eine Möglichkeit, die ersten Zeilen der Excel-Datei zu überprüfen (möglicherweise mithilfe eines temporären Imports), um zu ermitteln, wo die Kopfzeile tatsächlich beginnt. Beispielsweise durch die Überprüfung auf bekannte Spaltennamen.
– Oder irgendwelche JSL-Techniken, um mit dieser Art von Variabilität flexibler umzugehen.
Automatisierung und SkriptingDatenzusammenführung und -bereinigungQualitäts- und ProzesstechnikWindowsBetreff: Umgang mit zwei verschiedenen Excel-HeaderformatenKönnten Sie ein Beispiel für jede der beiden unterschiedlich formatierten Dateien bereitstellen? Das würde mir sehr dabei helfen, die richtige Vorgehensweise zu bestimmen. Normalerweise lese ich die ersten sieben Zeilen als einzelne Spalte ein. Anschließend durchsuche ich die Tabelle, um das Format zu bestimmen, und lese dann die gesamte Tabelle im ermittelten Format ein.
Betreff: Umgang mit zwei verschiedenen Excel-HeaderformatenVielen Dank für Ihre Antwort.
Ich füge die beiden Beispiele bei, eines für jedes Format.
Ich werde mir ansehen, wie ich Ihren Vorschlag umsetzen kann, um zu sehen, ob ich die ersten sieben Zeilen erfolgreich als einzelne Spalte lesen kann. Anschließend werde ich die Tabelle analysieren, um ihr Format zu bestimmen, und die vollständige Tabelle im ermittelten Format lesen.
Ich weiß Ihre Hilfe wirklich zu schätzen!
Betreff: Umgang mit zwei verschiedenen Excel-HeaderformatenJims Vorschlag ist eine großartige Option. Eine andere Möglichkeit wäre, etwas mehr Daten einzubeziehen und dann die Bereinigung in JMP durchzuführen.
Names Default To Here(1);
path = "$DOWNLOADS/BOM_191910000_Sample_Row5.xlsx";
//path = "$DOWNLOADS/BOM_212100000-A2_Sample_Row6.xlsx";
dt = Open(
path,
Worksheets("BOM"),
Use for all sheets(1),
Concatenate Worksheets(0),
Create Concatenation Column(0),
Worksheet Settings(
1,
Has Column Headers(0),
Data Starts on Row(5),
Data Starts on Column(1),
Data Ends on Row(0),
Data Ends on Column(0),
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("-")
)
);
header_row = Contains(dt[0, 1], "PART NUMBER");
If(header_row > 1,
dt << Delete Rows(1::header_row-1);
);
dt << Move up;
//empty_rows = dt << Get Rows Where(IsMissing(AsColumn(dt, 1)));
//dt << delete rows(empty_rows);Betreff: Umgang mit zwei verschiedenen Excel-HeaderformatenWenn in Ihren Tabellen der Name der ersten Spalte, die mit Kopfzeilen der Länge 6 eingelesen wird, eine gültige Zahl enthält, ist die Datenstartzeile 6, andernfalls ist sie 6.
Hier ist ein Beispiel, mit dem Sie beginnen können
For( i = 1, i <= N Items( namefiles ), i++,
//Transformation du fichier en table de données
dt = Open(
namefiles[i],
Worksheets( "BOM" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 6 ),
Headers Start on Row( 1 ),
Data Starts on Row( 7 ),
Data Starts on Column( 1 ),
Data Ends on Row( 7 ),
Data Ends on Column( 0 ),
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( "-" )
)
);
If( Is Missing( Num( Word( -1, Column( 1 )[1] ) ) ) == 0,
whatStartRow = 7;
whatHeaderStartRow = 6;
,
whatStartRow = 6;
whatHeaderStartRow = 5;
);
Close( dt, nosave );
dt = Open(
namefiles[i],
Worksheets( "BOM" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( whatHeaderStartRow ),
Data Starts on Row( whatStartRow ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
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( "-" )
)
);
);