Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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;
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;
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.
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.
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;