Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
pauloandre
Contributor 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

Tags (1)
1 Solution

Accepted Solutions
pauloandre
Contributor II

Re: Ajuda na função 'For Each'

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

6 Replies
lucianoapgarcia
New Contributor III

Re: Ajuda na função 'For Each'

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

Employee
Employee

Re: Ajuda na função 'For Each'

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

Re: Ajuda na função 'For Each'

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
Contributor II

Re: Ajuda na função 'For Each'

Tamil,

está faltando o FROM no script!!

Re: Ajuda na função 'For Each'

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
Contributor II

Re: Ajuda na função 'For Each'

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