Manejo de dos formatos de encabezado diferentes de ExcelHola a todos,
Estoy trabajando en un script JSL en JMP para automatizar la importación de archivos de Excel de listas de materiales (BOM). Estos archivos provienen de diferentes fuentes y, lamentablemente, no siguen un formato uniforme.
Estoy tratando con dos formatos específicos:
- Formato 1: los encabezados están en la fila 5, los datos comienzan en la fila 6
- Formato 2: los encabezados están en la fila 6, los datos comienzan en la fila 7
En este momento, mi script está codificado para usar el Formato 1 (Los encabezados comienzan en la fila (5)), pero necesito ajustarlo manualmente cada vez que recibo archivos en Formato 2.
Objetivo: Me gustaría hacer que el script sea lo suficientemente inteligente para detectar automáticamente el formato correcto y aplicar las configuraciones de importación adecuadas (Los encabezados comienzan en la fila, los datos comienzan en la fila), sin intervención manual.
A continuación se muestra un fragmento del script actual:
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 />...
¿Alguien ha tenido un problema similar? Busco:
Una forma de inspeccionar las primeras filas del archivo de Excel (quizás mediante una importación temporal) para inferir dónde comienza realmente el encabezado. Por ejemplo, comprobando los nombres de columna conocidos.
- O cualquier técnica JSL para manejar este tipo de variabilidad con mayor flexibilidad.
Automatización y scriptingCombinación y limpieza de datosIngeniería de Calidad y ProcesosVentanasRe: Manejo de dos formatos de encabezado diferentes en Excel¿Podrías proporcionar una muestra de cada uno de los dos archivos con diferentes formatos? Eso sería de gran ayuda para determinar el enfoque a seguir. Básicamente, lo que suelo hacer es leer las primeras 7 filas como una sola columna. Luego, analizo la tabla para determinar su formato y luego la leo completa con el formato determinado.
Re: Manejo de dos formatos de encabezado diferentes en ExcelMuchas gracias por tu respuesta.
Adjunto las dos muestras, una para cada formato.
Veré cómo implementar lo que sugirió para ver si puedo leer con éxito las primeras 7 filas como una sola columna y luego analizar la tabla para determinar su formato y leer la tabla completa usando el formato determinado.
¡Realmente aprecio tu ayuda!
Re: Manejo de dos formatos de encabezado diferentes en ExcelLa sugerencia de Jim es una gran opción, otra opción sería extraer un poco más de datos y luego hacer una limpieza en JMP.
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);Re: Manejo de dos formatos de encabezado diferentes en ExcelEn sus hojas de cálculo, si el nombre de la primera columna que se lee utilizando encabezados de longitud 6 contiene un número válido, entonces la fila de inicio de datos es 6; de lo contrario, es 6.
Aquí tienes un ejemplo con el que puedes empezar.
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( "-" )
)
);
);