Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Ler o nome das sheets de um Doc Excel.

Boa noite senhores.

Tenho uma planilha excel com varias sheets, uma para cada mês do ano, ex: Janeiro, Fevereiro.

Como poderia ler esses nomes e incluir como um campo na minha tabela?
Ou somente ler todas as sheets sem saber o nome delas?

Assim eu consigo ler, porem teria que ter um padrão numérico.

LET vStartSheetNumber = 1;

LET vEndSheetNumber = 4;

LET vExcelFileName = 'C:\Users\Malta\Desktop\Nova pasta\Planilha do Microsoft Excel.xlsx';

FOR index = vStartSheetNumber TO vEndSheetNumber

     LOAD valor

     FROM $(vExcelFileName)

     (ooxml, embedded labels, table is Plan$(index));

NEXT

Labels (2)
1 Solution

Accepted Solutions
nicolett_yuri

Você pode fazer uma conexão ODBC em sua planilha e descobrir o nome de todas as abas, seria mais ou menos desta forma:

LET vPlanilha = 'C:\Planilha.xls';

ODBC CONNECT32 TO [Excel Files;DBQ=$(vPlanilha)];

//Retornando todas as informações da planilha e colocando dentro da tabela tables

tables:

SQLtables;

DISCONNECT;

//Para cada aba da planilha, faço a leitura dos dados

FOR i = 0 to NoOfRows('tables')-1

  LET sheetName = peek('TABLE_NAME', i, 'tables');

  TRACE $(sheetName);

  //Removo as abas que contém o Print_Area em seu nome

  IF WILDMATCH('$(sheetName)', '*Print_Area*')=0 THEN

  SET ErrorMode = 0;

  Planilha:

  LOAD

  '$(sheetName)' as NomeAba,

  *

  FROM $(vPlanilha) (biff, embedded labels, table is [$(sheetName)]);

  END IF 

NEXT i //Próxima aba

DROP TABLE tables;

View solution in original post

4 Replies
nicolett_yuri

Você pode fazer uma conexão ODBC em sua planilha e descobrir o nome de todas as abas, seria mais ou menos desta forma:

LET vPlanilha = 'C:\Planilha.xls';

ODBC CONNECT32 TO [Excel Files;DBQ=$(vPlanilha)];

//Retornando todas as informações da planilha e colocando dentro da tabela tables

tables:

SQLtables;

DISCONNECT;

//Para cada aba da planilha, faço a leitura dos dados

FOR i = 0 to NoOfRows('tables')-1

  LET sheetName = peek('TABLE_NAME', i, 'tables');

  TRACE $(sheetName);

  //Removo as abas que contém o Print_Area em seu nome

  IF WILDMATCH('$(sheetName)', '*Print_Area*')=0 THEN

  SET ErrorMode = 0;

  Planilha:

  LOAD

  '$(sheetName)' as NomeAba,

  *

  FROM $(vPlanilha) (biff, embedded labels, table is [$(sheetName)]);

  END IF 

NEXT i //Próxima aba

DROP TABLE tables;

Not applicable
Author

Yuri,
Obrigado pela ajuda, mais devo alinhas a mudança do padrão das bases.
Esse processo funciona, porém não é performático.

Vlw.

nicolett_yuri

Com esse processo você descobre o nome das abas do excel, mas se cada aba estiver em um padrão diferente de tabela, então você precisará adequar a leitura.

mauroponte
Creator II
Creator II

Maciel,

Veja se o script abaixo te ajuda:

MapaMes:

load * inline [

Numero_Mes,Nome_Mes

1,Janeiro

2,Fevereiro

3,Março

4,Abril

5,Maio

6,Junho

7,Julho

8,Agosto

9,Setembro

10,Outubro

11,Novembro

12,Dezembro

];

for i=0 to 11

     let vMapaMes=  PEEK('Nome_Mes','$(i)','MapaMes');

     tabela:

     LOAD

            Campo01,

            Campo02

     FROM

     (ooxml, embedded labels, table is $(vMapaMes));

next;