Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
pauloandre
Creator II
Creator II

Ajuda na função 'For Each'

Prezados,

estou utilizando o script abaixo para ler arquivos xlsx contidos num determinado diretório e logo em seguida gravar o seu QVD correspondente, porém quando a leitura de algum arquivo apresenta algum tipo de erro o QVD é gravado assim mesmo de forma equivocada. Qual ajuste devo realizar para que ao ser encontrado algum erro o processo 'pule' para o proximo arquivo, deixando de gravar o QVD do arquivo com erro

Abraços!!

FOR Each vArquivo in FileList ('$(vDadosPlanilha)\Cliente H\*.xlsx')

LET vNomeArquivo = SubField(SubField(vArquivo, '\', -1), '.xlsx', 1);

TRACE vNomeArquivo: $(vNomeArquivo);


$(vNomeArquivo):

LOAD Left(FileBaseName(),6) AS Cod_Cliente,

     ReloadTime() as DataCarga,

     Date(Date#(Right(FileBaseName(),6)&'01','YYYYMMDD')) AS Data_Estoque_Venda,

     FileBaseName() as %File,

     '2' as Status,

     'Cliente H' AS Cliente,

FROM

[$(vDadosPlanilha)\Cliente H\*.xlsx]

(ooxml, no labels, header is 1 lines, table is Sheet1);


STORE $(vNomeArquivo) into ..\DadosExtraidos\$(vNomeArquivo).QVD;

DROP Table $(vNomeArquivo);


NEXT vArquivo

1 Solution

Accepted Solutions
pauloandre
Creator II
Creator II
Author

Prezados,

unificando as ajudas, encontrei a solução.

Obrigado a todos

FOR Each vArquivo in FileList ('$(vDadosPlanilha)\Cliente H\*.xlsx')

LET vNomeArquivo = SubField(SubField(vArquivo, '\', -1), '.xlsx', 1);

TRACE vNomeArquivo: $(vNomeArquivo);

set ErrorMode=0;

$(vNomeArquivo):

LOAD Left(FileBaseName(),6) AS Cod_Cliente,

     ReloadTime() as DataCarga,

     Date(Date#(Right(FileBaseName(),6)&'01','YYYYMMDD')) AS Data_Estoque_Venda,

     FileBaseName() as %File,

     '2' as Status,

     'Cliente H' AS Cliente,

     A AS Cod_Modelo,

     B AS Qtd_Estoque,

     C AS Qtd_Ven

FROM

[$(vDadosPlanilha)\Cliente H\$(vNomeArquivo).xlsx]

(ooxml, no labels, header is 1 lines, table is Sheet1)

Where Len(A)>0;

If ScriptError=0 AND len('$(vNomeArquivo)')=13 THEN

STORE $(vNomeArquivo) into ..\DadosExtraidos\$(vNomeArquivo).QVD;

DROP Table $(vNomeArquivo);

ELSE

DROP Table $(vNomeArquivo);

END IF

NEXT vArquivo

View solution in original post

6 Replies
luciano_garcia
Contributor III
Contributor III

Paulo, olá!

Acredito que você pode trabalhar com as variáveis de erro no seu Script (inclusive se o erro não seja previsível). Vide help:

Variáveis de erro ‒ QlikView

E com as funções condicionais para executar o bloco de código de "teste" em caso de erro. Esse link ilustra por meio de ex.:

Error Handling in Qlikview | Business Intelligence

e neste outro (método 3): QlikView Addict: Checking if a File Exists

Clever_Anjos
Employee
Employee

Tente assim

$(vNomeArquivo):

LOAD Left(FileBaseName(),6) AS Cod_Cliente,

     ReloadTime() as DataCarga,

     Date(Date#(Right(FileBaseName(),6)&'01','YYYYMMDD')) AS Data_Estoque_Venda,

     FileBaseName() as %File,

     '2' as Status,

     'Cliente H' AS Cliente,

FROM

[$(vDadosPlanilha)\Cliente H\*.xlsx]

(ooxml, no labels, header is 1 lines, table is Sheet1);

If alt(NoOfRows('$(vNomeArquivo)'),0) >0 then

   STORE $(vNomeArquivo) into ..\DadosExtraidos\$(vNomeArquivo).QVD;

   DROP Table $(vNomeArquivo);

endif

tamilarasu
Champion
Champion

Hi Paulo,


Eu acho que é isso que você precisa. Por favor nos informe.


FOR Each vArquivo in FileList ('$(vDadosPlanilha)\*.xlsx')

LET vNomeArquivo = SubField(SubField(vArquivo, '\', -1), '.xlsx', 1);
TRACE vNomeArquivo: $(vNomeArquivo);

[$(vNomeArquivo)]:
LOAD Left('$(vNomeArquivo)',6) AS Cod_Cliente,
ReloadTime() as DataCarga,
Date(Date#(Right('(vNomeArquivo)',6)&'01','YYYYMMDD')) AS Data_Estoque_Venda,
'$(vNomeArquivo)'
as %File,
'2'
as Status,
'Cliente H'
AS Cliente
AutoGenerate 1;


STORE [$(vNomeArquivo)] into [$(vDadosPlanilha)]\$(vNomeArquivo).qvd (qvd);
DROP Table [$(vNomeArquivo)];


NEXT vArquivo

pauloandre
Creator II
Creator II
Author

Tamil,

está faltando o FROM no script!!

tamilarasu
Champion
Champion

Hi Paulo,

Sí. Eliminé la parte de. Creo que desea almacenar detalles del archivo (no datos) en qvd's. Si no, por favor, hágame saber su requerimiento. Gracias

pauloandre
Creator II
Creator II
Author

Prezados,

unificando as ajudas, encontrei a solução.

Obrigado a todos

FOR Each vArquivo in FileList ('$(vDadosPlanilha)\Cliente H\*.xlsx')

LET vNomeArquivo = SubField(SubField(vArquivo, '\', -1), '.xlsx', 1);

TRACE vNomeArquivo: $(vNomeArquivo);

set ErrorMode=0;

$(vNomeArquivo):

LOAD Left(FileBaseName(),6) AS Cod_Cliente,

     ReloadTime() as DataCarga,

     Date(Date#(Right(FileBaseName(),6)&'01','YYYYMMDD')) AS Data_Estoque_Venda,

     FileBaseName() as %File,

     '2' as Status,

     'Cliente H' AS Cliente,

     A AS Cod_Modelo,

     B AS Qtd_Estoque,

     C AS Qtd_Ven

FROM

[$(vDadosPlanilha)\Cliente H\$(vNomeArquivo).xlsx]

(ooxml, no labels, header is 1 lines, table is Sheet1)

Where Len(A)>0;

If ScriptError=0 AND len('$(vNomeArquivo)')=13 THEN

STORE $(vNomeArquivo) into ..\DadosExtraidos\$(vNomeArquivo).QVD;

DROP Table $(vNomeArquivo);

ELSE

DROP Table $(vNomeArquivo);

END IF

NEXT vArquivo