Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

IMPORTAR ABAS DO EXCEL PARA QLIKVIEW

Bom dia!

Prezados Senhores

Tenho um arquivo no excel onde esse arquivo poui 120 abas cada uma com mais de cinco mil linhas.

Como faço faço para importar todas essa 120 abas de uma só vez para o qlikview, sem que tenha que apontar uma a uma no script do qlikview?

Abs

William

1 Solution

Accepted Solutions
Not applicable
Author

Ola willian,

Você pode criar um driver ODBC para acessar a planilha e existem variaveis ODBC que você consegue manipular para verificar todas as abas automaticamente.

Abraços

Exemplo:

// Conexão ODBC

ODBC CONNECT TO [Excel;DBQ=$(input_pathname)];

// Leitura de variaveis do ODBC

TABLES:

sqltables;

// TABLE_NAME corresponde as informações das abas da sua planilha (pode verificar as informações do SQLTABLES)

// Tratamento para leitura de diversas abas de uma planilha

FOR i = 1 to fieldValueCount('TABLE_NAME')

  LET sheetName=Replace(Replace(purgeChar(fieldValue('TABLE_NAME', i), chr(39)),'$_',''),'$','');

  [$(sheetName)]:

  REPLACE LOAD * FROM $(input_pathname) (biff, embedded labels, table is [$(sheetName)$]);

  NEXT

Drop table TABLES;

View solution in original post

11 Replies
Not applicable
Author

Ola willian,

Você pode criar um driver ODBC para acessar a planilha e existem variaveis ODBC que você consegue manipular para verificar todas as abas automaticamente.

Abraços

Exemplo:

// Conexão ODBC

ODBC CONNECT TO [Excel;DBQ=$(input_pathname)];

// Leitura de variaveis do ODBC

TABLES:

sqltables;

// TABLE_NAME corresponde as informações das abas da sua planilha (pode verificar as informações do SQLTABLES)

// Tratamento para leitura de diversas abas de uma planilha

FOR i = 1 to fieldValueCount('TABLE_NAME')

  LET sheetName=Replace(Replace(purgeChar(fieldValue('TABLE_NAME', i), chr(39)),'$_',''),'$','');

  [$(sheetName)]:

  REPLACE LOAD * FROM $(input_pathname) (biff, embedded labels, table is [$(sheetName)$]);

  NEXT

Drop table TABLES;

ericcosmai
Contributor III
Contributor III

Olá William.

É possível fazer a carga dessas abas fazendo um for, entretanto, para isso há duas condições:

1º) O arquivo deve ter em cada aba o mesmo cabeçalho

2º) Cada aba deve ter o nome que siga uma sequência. Exemplo: Plan1,Plan2,Plan3.....

Segue anexo de exemplo.

Espero ter ajudado.

Abraço.

mercadante
Creator
Creator

Bom dia Eduardo,

Tudo bem?

Será que você pode me ajudar com esse código?

A planilha que vou ler é incrementada uma nova aba toda semana. O Exemplo que o Éric postou funciona, mas preciso a cada semana incrementar +1 no For.

Pelo que entendi no seu exemplo, isso vai se tornar dinâmico correto?

O que não entendi muito bem é a conexão odbc

nicolett_yuri

Antonio, a conexão ODBC é realizada para descobrir a quantidade de abas que o excel possui. Ele faz isso através do comando sqltables, que retorna todas as tabelas da planilha e no for ele conta o número de registros ou seja o número de tabelas.

mercadante
Creator
Creator

Yuri,

Criei a conexão ODBC, e quando testo ele diz que a conexão foi bem sucedida.

Porem, quando executo o código ele diz que não foi possível abrir o arquivo.

Reparei que a quarta e quinta linha " TABLES: sqltables;" ele grifa como se existisse um erro de sintaxe.

Você sabe dizer se falta declarar alguma coisa na linha do TABLES e SQLTABLES?

abaixo segue código que estou utilizando.

// Conexão ODBC

ODBC CONNECT TO [Excel Files;DBQ=C:\Users\casanj\Documents\Lixo\Abas.xlsx];

// Leitura de variaveis do ODBC

TABLES:

sqltables;

// TABLE_NAME corresponde as informações das abas da sua planilha (pode verificar as informações do SQLTABLES)

// Tratamento para leitura de diversas abas de uma planilha

FOR i = 1 to fieldValueCount('TABLE_NAME')

  LET sheetName=Replace(Replace(purgeChar(fieldValue('TABLE_NAME', i), chr(39)),'$_',''),'$','');

  [$(sheetName)]:

  REPLACE LOAD * FROM $(input_pathname) (biff, embedded labels, table is [$(sheetName)$]);

  NEXT

Drop table TABLES;

nicolett_yuri

Esse  comando o QlikView não reconhece mesmo, mas esta correto.

Vou montar um exemplo e anexo no próximo post

mercadante
Creator
Creator

Na verdade ele esta dando erro na linha   [$(sheetName)]:


diz que não foi possível abrir o arquivo

nicolett_yuri

Antonio, você precisa ver o resultada da variável sheetName. Você pode mandar a sua planilha?



Uma tentativa, altere a linha

LET sheetName=Replace(Replace(purgeChar(fieldValue('TABLE_NAME', i), chr(39)),'$_',''),'$','');


para


LET sheetName = purgeChar(peek('TABLE_NAME', i, 'TABLES'), chr(39));

mercadante
Creator
Creator

Alterei, mas apresentou o mesmo erro.

Segue planilha