Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

load todas las hojas de excel

Hola amigos,

una consulta es posible cargar todos las hojas de un excel con una sola sentencia load, tengo varios archivo excel por año el cual tiene 12 hojas, una hoja por mes, estas hojas comparten la misma estructura.

por favor si alguien tiene una idea de como hacer la cargar mediante una función u otro modo, por que son varios archivos y si hago un load por cada hoja estaría repitiendo código de forma innecesaria.

para cargar todos los excel ya encontré una forma, pero no se como cargar todos las  hojas del excel

SET Carpeta = "xls";

FOR Each file in FileList('$(Carpeta)\*.xlsx')

  LOAD Origen,

     [S/T],

     [Centro Origen],

     [Almacen Origen],

     [Centro Destino],

     [Almacen Destino],

     Transportista,

     [Fecha Despacho],

     Año,

     Mes,

  FROM $(file)

  (ooxml, embedded labels, table is Operaciones);

NEXT file

1 Solution

Accepted Solutions
julian_rodriguez
Partner - Specialist
Partner - Specialist

Hola Christian

Este código con la función subfield te servirá para leer las hojas de un mismo libro de Excel. Ten en cuenta que el asterisco (*) no se puede usar en todas partes.

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='#.##0,00 €;-#.##0,00 €';

SET TimeFormat='h:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY h:mm:ss[.fff]';

SET MonthNames='ene;feb;mar;abr;may;jun;jul;ago;sep;oct;nov;dic';

SET DayNames='lun;mar;mie;jue;vie;sáb;dom';

SET i = 0;

For i = 1 to 2

LET vMes= SubField(MonthNames,';',$(i));

Data:

LOAD Dato1,

     Dato2

FROM

Libro1.xlsx

(ooxml, embedded labels, table is '$(vMes)-14');

Next i;

Saludos!

View solution in original post

7 Replies
julian_rodriguez
Partner - Specialist
Partner - Specialist

Hola Christian

Si todas las hojas de tu Excel tienen la misma estructura, y si por ejemplo cada hoja se llama semejante, algo como:

Hoja1

Hoja2

Hoja3

Puedes hacer algo como esto, para leer una a una las hojas, reemplazando en el el número de la hoja por la variable $(i),

SET i = 0;

For i = 1 to 3

Data:

LOAD Dato1,

     Dato2

FROM

Libro1.xlsx

(ooxml, embedded labels, table is Hoja$(i));

Next i;

Saludos!

Not applicable
Author

Hola Christian,

Si todas las hojas tienen una estructura de nombre similar podrías utilizar un asterisco:

//Ejemplo para excels que tengan un nombre que empiece por "compras".
LOAD
Producto,
Fecha,
Cantidad
FROM
compras
*.xlsx
(
ooxml, embedded labels, table is Hoja1); "

Si quieres cargar todos los excels de una ruta puedes utilizar *.xlsx en lugar de compras*.xlsx


Espero que te ayude!

Not applicable
Author

Gracias por la respuesta Julian,

En mi caso las hojas tienen el siguiente formato Ene-14, Feb-14 y se van agregando mes a mes, hay alguna forma de usar un array para poder remplazar el contador por el nombre del mes que corresponde?

pensé usar

SET vMes='ene;feb;mar;abr;may;jun;jul;ago;sep;oct;nov;dic';

SET i = 0;

For i = 1 to 3

Data:

LOAD Dato1,

     Dato2

FROM

Libro1.xlsx

(ooxml, embedded labels, table is subfield($(vMes),';',$(1)));

Next i;

pero no me reconoce la sentecia subfield($(vMes),';',$(1))

gracias,

Not applicable
Author

Gracias Jose,

una consulta es comodín * se puede usar en cualquier parte de la cadena? ejemplo

compras*.xlsx

*compras.xlsx

Not applicable
Author

Sí, se puede utilizar como comodín tal y como explicas en tu ejemplo.

julian_rodriguez
Partner - Specialist
Partner - Specialist

Hola Christian

Este código con la función subfield te servirá para leer las hojas de un mismo libro de Excel. Ten en cuenta que el asterisco (*) no se puede usar en todas partes.

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='#.##0,00 €;-#.##0,00 €';

SET TimeFormat='h:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY h:mm:ss[.fff]';

SET MonthNames='ene;feb;mar;abr;may;jun;jul;ago;sep;oct;nov;dic';

SET DayNames='lun;mar;mie;jue;vie;sáb;dom';

SET i = 0;

For i = 1 to 2

LET vMes= SubField(MonthNames,';',$(i));

Data:

LOAD Dato1,

     Dato2

FROM

Libro1.xlsx

(ooxml, embedded labels, table is '$(vMes)-14');

Next i;

Saludos!

Not applicable
Author

Gracias Julian!!!!

funciono a la perfección.