6 Replies Latest reply: Feb 3, 2018 12:08 PM by Paulo Andre de Oliveira RSS

    Ajuda na função 'For Each'

    Paulo Andre de Oliveira

      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

        • Re: Ajuda na função 'For Each'
          Luciano Garcia

          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

          • Re: Ajuda na função 'For Each'
            Clever Anjos

            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'
              Tamil Nagaraj

              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

              • Re: Ajuda na função 'For Each'
                Paulo Andre de Oliveira

                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