Leitura e Gravação de arquivos Excel

Básico para trabalhar com Excel no Genexus

A seguir vou listar algumas funções básicas para manipulação de arquivos Excel (XLS, XLSX e CSV) .

É necessário criar uma variável e definir ela com o tipo ExcelDocument.

No nosso caso vou criar uma variável de nome Excel.

Criação de variável Tipo ExcelDocument

Para abrir ou criar o arquivo é necessário efetuar o comando : &Excel.Open(“CAMINHO DO ARQUIVO”) ou &Excel.Open(&VarCharNomeDoArquivo)

Para verificar se ocorreu algum erro é necessário acessar sempre os métodos

&Excel.ErrCode
// Se tiver valor = 0 não tem problema, caso tenha valor > 0 ocorreu algum problema


&Excel.ErrDescription
// Caso o ErrCod tenha valor > 0 aqui sairá a descrição do erro

Recomendo sempre colocar em uma Subrotina para poder verificar em qualquer  momento e monitorar caso alguma ação com o Excel dê erro.

Sempre ao final da criação, alteração ou leitura do arquivo feche o arquivo com:
&Excel.Close()
E para trabalhar com abas do Excel temos dois comandos:

Selecionar a Aba :
&Excel.SelectSheet(“NomeDaAba”)


Renomear a Aba corrente para um novo nome:
&Excel.RenameSheet(“NomedaAba”)

Leitura

Irei demonstrar como fazer a leitura de um arquivo XLSX que tem a seguinte estrutura.

&Excel.Open("C:\DAVIDAGOSTINI\ARQUIVOEXCEL.XLSX")
Do 'Verificar_Erro_Excel'
If &Excel_ErrCode > 0 Msg('Ocorreu o seguinte erro ao abrir o arquivo : ' + &Excel_ErrDescription) Return Endif
For &Linha = 1 to 99999
if Not &Excel.Cells(&Linha,1).Value.Trim().Length() > 0 Exit EndIf For &Coluna = 1 to 4 Do Case Case &Coluna = 1 &Codigo = &Excel.Cells(&Linha,&Coluna).Value Case &Coluna = 2 &Nome = &Excel.Cells(&Linha,&Coluna).Value Case &Coluna = 3 &Endereco = &Excel.Cells(&Linha,&Coluna).Value Case &Coluna = 4 &Email = &Excel.Cells(&Linha,&Coluna).Value EndCase EndFor // Aqui Virá o Seu Código para Inclusão na Base de Dados ou alguma outra ação necessária &Codigo.SetEmpty() &Nome.SetEmpty() &Endereco.SetEmpty() &Email.SetEmpty()
EndFor
&Excel.Close()

Sub 'Verificar_Erro_Excel'
If &Excel.ErrCode > 0 // Se tiver valor = 0 não tem problema, caso tenha valor > 0 ocorreu algum problema
&Excel_ErrCode = &Excel.ErrCode &Excel_ErrDescription = &Excel.ErrDescription // Caso o ErrCod tenha valor > 0 aqui sairá a descrição do erro EndIf
EndSub

Note que como tenho uma estrutura definida nas colunas eu posso percorrer apenas as 4 colunas, mas é possível também percorrer todas as colunas utilizando a mesma lógica.

Para verificar na leitura do arquivo quando não tiver conteúdo, eu verifico se na linha que estou posicionado se existe conteúdo na primeira coluna, caso não tenha eu saio do laço de repetição.

Escrita

Irei demonstrar como fazer a gravação de um arquivo XLSX na seguinte estrutura.

&Excel.Open("C:\DAVIDAGOSTINI\ARQUIVOEXCEL.XLSX")
&Linha = 1
&Excel.Cells(&Linha,1).Text = 'Código' &Excel.Cells(&Linha,2).Text = 'Nome' &Excel.Cells(&Linha,3).Text = 'Endereço' &Excel.Cells(&Linha,4).Text = 'Email'
For &Coluna = 1 to 4
&Excel.Cells(&Linha,&Coluna).Bold = True
EndFor
For Each TabelaCliente
&Linha += 1
&Excel.Cells(&Linha,1).Number = ClienteCodigo &Excel.Cells(&Linha,2).Text = ClienteNome &Excel.Cells(&Linha,3).Text = ClienteEndereco &Excel.Cells(&Linha,4).Text = ClienteEmail
EndFor
&Excel.Save()
If &Excel_ErrCode > 0
Msg('Ocorreu o seguinte erro ao salvar o arquivo : ' + &Excel_ErrDescription)
Return
Endif
&Excel.Close()

Sub 'Verificar_Erro_Excel'
if &Excel.ErrCode > 0 // Se tiver valor = 0 não tem problema, caso tenha valor > 0 ocorreu algum problema
&Excel_ErrCode = &Excel.ErrCode &Excel_ErrDescription = &Excel.ErrDescription // Caso o ErrCod tenha valor > 0 aqui sairá a descrição do erro EndIf
EndSub

Está sendo demonstrado como gravar os dados de uma tabela para o Excel.

Estamos deixando a primeira coluna em negrito, com o comando BOLD.

Existem outras propriedades da Cells que podem ser utilizadas para mudar a apresentação da célula.

  • Bold = Negrito
  • Color = Cor da Fonte
  • Date = Pegar ou Setar o conteúdo como Data
  • Font = Nome da Fonte
  • Italic = Italico
  • Number = Pegar ou Setar o conteúdo como valor numérico
  • Size = Tamanho da Fonte
  • Text = Pegar ou Setar o conteúdo como Texto
  • Type = Retorna o tipo de dado da celula
  • Underline = Sublinhado
  • Value= Retorna o valor, caso a celula tenha formula utilize o value, caso pegue como text ele irá trazer a formula e não o valor.

Na minha opinião ainda faltam algumas coisas para melhorar neste tipo de objeto. Segue minha listinha:

* Cor de Fundo
* Deixar campo já como autofiltro
* Mesclar células
* Orientação de texto

343 Views
2018-09-14T10:59:34-03:00 By |Uncategorized|6 Comentários

Sobre o Autor:

Avatar

6 Comments

  1. Avatar
    Anderson abril 20, 2020 em 16:19 - Responder

    Olá, uma dúvida.
    Isso funciona em ambiente web? Para mim só apresenta erro \;
    abraço

    • David Agostini
      David Agostini maio 21, 2020 em 12:40 - Responder

      Funciona sim …

      Qual erro ocorre para você ?

  2. Avatar
    Ronaldo maio 20, 2020 em 19:37 - Responder

    boa noite, uso genexus 9 e não consigo gerar a extensão xlsx só a xls,estou fazendo algo errado ou não tem jeito.

    • David Agostini
      David Agostini maio 21, 2020 em 12:40 - Responder

      Realmente no GX 9 ele faz apenas XLS.

      Esta versão GX 9 é de 2009.

  3. Avatar
    Reblec maio 21, 2020 em 00:28 - Responder

    no web você precisa fazer upload do excel para o servidor. Estou vendo como heheh

    • David Agostini
      David Agostini maio 21, 2020 em 12:40 - Responder

      Para fazer upload de arquivo você pode usar o FileUpload ou Blob.

Deixar Um Comentário