Página 1 de 1

Importar de planilha do EXCEL

Enviado: 14 Out 2025 17:36
por jelias
Olá amigos,

Fiz uma rotina para importar dados da planilha disponibilizada pelo governo da cClassTrib.
Ocorre que o campo LC Redação não é passado para variável e sempre o valor de NIL.
Ao tentar salvar no banco de dados apresenta erro.

Irei postar a rotina, caso alguém possa ajudar agradeço antecipadamente.

Código: Selecionar todos

/---------------------------------------------------------------------------------------------------------------------------------
// Importar Tabela cClassTrib
// 
STATIC FUNCTION IMPORTARTABELA()
LOCAL cCaminho, CNomeArquivo
LOCAL cCST, cDescricaoCST, cCClassTrib, cNomecClassTrib, cDescricao, cLcRedacao, cLC21425, cTipoDeAliquota, npRedIBS, npRedCBS, cind_RedutorBC, cind_CredPres, cindMono, cindMonoReten, cindMonoRet, cindMonoDif, cCredito_para, cdIniVig, cdFimVig, dDataAtualizacao

cCaminho:="d:\DadosPDL\RT"
cNomeArquivo="cClassTrib.xlsx"
IF !FILE(cCaminho+"\"+cNomeArquivo)
   MENSAGEM("Atenção, arquivo cClassTrib.xlxs NÃO encontrado da pasta "+cCaminho,8)
   retu
end   

oExcel := TOleAuto():New( "Excel.Application" )
oExcel:WorkBooks:Open( cCaminho+"\"+cNomeArquivo )
oExcel:Visible := .F.
oSheet := oExcel:Get( "ActiveSheet" )
oSheet:Cells( 1, 1 ):Select()

nLin:=2 // Pula o cabeçalho 
do while !EMPTY(oSheet:Cells( nLin, 1 ):Value) 
   // Caso a célula 1 estiver vazia, irá sair automaticamente do lastro. 

   cCST = oSheet:Cells( nLin, 1 ):Value               // Código de Situação Tributária do IBS e da CBS
   cDescricaoCST = oSheet:Cells( nLin, 2 ):Value      // Significado do Código de Situação Tributária do IBS e da CBS;
   cCClassTrib = oSheet:Cells( nLin, 3 ):Value        // Tributária do IBS e da CBS, sendo os três primeiros dígitos idênticos ao CST-IBS/CBS
   cNomecClassTrib = oSheet:Cells( nLin, 4 ):Value    // Nome reduzido para apresentação da Classificação Tributária 
   cDescricao = oSheet:Cells( nLin, 5 ):Value         // Condição a que se refere a Classificação Tributária do IBS e da CBS
   cLcRedacao = oSheet:Cells( nLin, 6 ):Value         // Redação do artigo da LC 214/2025 onde a situação a que se refere a Classificação Tributária do IBS e da CBS está prevista
   cLC21425   = oSheet:Cells( nLin, 7 ):Value         // Texto e regulamento da Lei Complementar 214/2025 onde a condição a que se refere a Classificação Tributária do IBS e da CBS está prevista
   cTipoDeAliquota = oSheet:Cells( nLin, 8 ):Value    // Define o tipo de alíquota aplicável, conforme disposto na Lei Complementar nº 214/2025. (Padrao / Fixa / Sem aliquota / Uniforme Nacional / Uniforme Setorial)
   npRedIBS = oSheet:Cells( nLin, 9 ):Value           // Percentual de redução da alíquota do IBS associado ao código informado em cClassTrib.
   npRedCBS = oSheet:Cells( nLin, 10 ):Value          // Percentual de redução da alíquota da CBS correspondente ao cClassTrib. 
   cind_RedutorBC = oSheet:Cells( nLin, 11 ):Value    // Indicadores que estabelecem a exigência, permissão ou vedação de preenchimento de campos no respectivo Documento Fiscal Eletrônico (DFe), conforme especificado em Nota Técnica. São eles: ind_RedutorBC, ind_gTribRegular, ind_CredPres, indMono, indMonoReten, indMonoRet, indMonoDif
   cind_CredPres = oSheet:Cells( nLin, 12 ):Value     // Indicadores que estabelecem a exigência, permissão ou vedação de preenchimento de campos no respectivo Documento Fiscal Eletrônico (DFe), conforme especificado em Nota Técnica. São eles: ind_RedutorBC, ind_gTribRegular, ind_CredPres, indMono, indMonoReten, indMonoRet, indMonoDif
   cindMono = oSheet:Cells( nLin, 13 ):Value          // Indicadores que estabelecem a exigência, permissão ou vedação de preenchimento de campos no respectivo Documento Fiscal Eletrônico (DFe), conforme especificado em Nota Técnica. São eles: ind_RedutorBC, ind_gTribRegular, ind_CredPres, indMono, indMonoReten, indMonoRet, indMonoDif
   cindMonoReten = oSheet:Cells( nLin, 14 ):Value     // Indicadores que estabelecem a exigência, permissão ou vedação de preenchimento de campos no respectivo Documento Fiscal Eletrônico (DFe), conforme especificado em Nota Técnica. São eles: ind_RedutorBC, ind_gTribRegular, ind_CredPres, indMono, indMonoReten, indMonoRet, indMonoDif
   cindMonoRet = oSheet:Cells( nLin, 15 ):Value       // Indicadores que estabelecem a exigência, permissão ou vedação de preenchimento de campos no respectivo Documento Fiscal Eletrônico (DFe), conforme especificado em Nota Técnica. São eles: ind_RedutorBC, ind_gTribRegular, ind_CredPres, indMono, indMonoReten, indMonoRet, indMonoDif
   cindMonoDif = oSheet:Cells( nLin, 16 ):Value       // Indicadores que estabelecem a exigência, permissão ou vedação de preenchimento de campos no respectivo Documento Fiscal Eletrônico (DFe), conforme especificado em Nota Técnica. São eles: ind_RedutorBC, ind_gTribRegular, ind_CredPres, indMono, indMonoReten, indMonoRet, indMonoDif
   cCredito_para = oSheet:Cells( nLin, 17 ):Value     // Irei extrair o campo mas não irei salvar no banco do dados
   cdIniVig = oSheet:Cells( nLin, 18 ):Value          // Irei extrair o campo mas não irei salvar no banco do dados 
   cdFimVig = oSheet:Cells( nLin, 19 ):Value          // Irei extrair o campo mas não irei salvar no banco do dados
   dDataAtualizacao = oSheet:Cells( nLin, 20 ):Value  // Data da última atualização do cClassTrib

   ? cCST
   ? hb_ANSIToOEM(cDescricaoCST)
   ? cClassTrib
   ? hb_ANSIToOEM(cNomecClassTrib)
   ? hb_ANSIToOEM(cDescricao)
   ? hb_ANSIToOEM(cLcRedacao)
   ? hb_ANSIToOEM(cLC21425)
   ? hb_ANSIToOEM(cTipoDeAliquota)
   ? npRedIBS
   ? npRedCBS

   inkey(0)



   sele AL_CCLAS
   DBSETORDER(1)
   if !DBSEEK(ALLTRIM(cClassTrib))
      ADDREC(10)
      repl cClassTrib   with RETIRARACENTOS(ALLTRIM(cCClassTrib))
   else
      RECLOCK(10)
   end
   repl CST             with ALLTRIM(cCST)
   repl DescricaoC      with RETIRARACENTOS(ALLTRIM(cDescricaoCST))
   repl NomecClass      with RETIRARACENTOS(ALLTRIM(cNomecClassTrib))
   repl Descricao       with RETIRARACENTOS(ALLTRIM(cDescricao))
   repl LCRedacao       with cLcRedacao // RETIRARACENTOS(ALLTRIM(cLcRedacao))
   repl TipodeAliq      with RETIRARACENTOS(ALLTRIM(cTipodeAliquota))
   repl pRedIBS         with npRedIBS
   repl pRedCBS         with npRedCBS
   repl ind_Reduto      with cind_RedutorBC
   repl ind_CredPr      with cind_CredPres
   repl indMono         with cindMono
   repl indMonoRet      with cindMonoReten
   repl indMonoRet      with cindMonoRet
   repl indMonoDif      with cindMonoDif
   repl DataAtuali      with dDataAtualizacao
   DBCOMMIT()
   DBUNLOCK()
   nLin++
End
oExcel:ActiveWorkbook:Close()
retu

Não é permitido anexar a planilha no formato .xlxs, entretanto pode ser baixada no link
https://dfe-portal.svrs.rs.gov.br/Cff/C ... Tributaria


Saudações,

Júlio.

Importar de planilha do EXCEL

Enviado: 17 Out 2025 11:31
por ivanil
Ola,

Posso não ter olhado a planilha correta, mas a que vi, a primeira linha, esta coluna não tem valor atribuído;

Sugestão para você lidar com dados do excel;
Você poderia estar lidando com uma coluna numérica e o usuário pode ter atribuído um caractere; embora visualmente pareça numero; sugiro que trate os dados antes de tentar carregar. eventualmente uma coluna pode comportar tipos distintos a cada linha.

at;

Ivanil