Coder Social home page Coder Social logo

saulogm / advpl-excel Goto Github PK

View Code? Open in Web Editor NEW
46.0 9.0 23.0 2.05 MB

Classe em ADVPL para criar, ler ou editar planilhas do excel no formato xlsx

Home Page: https://github.com/saulogm/advpl-excel/wiki

License: Apache License 2.0

xBase 100.00%
advpl excel totvs xlsx protheus planilha yexcel

advpl-excel's People

Contributors

saulogm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

advpl-excel's Issues

Desempenho do método MergeCell

Saulo, parabéns pela classe e obrigado por disponibilizar ela, nos ajudou muito!

Usamos ela em um relatório de packing list para os nossos pedidos. Em alguns casos já tínhamos notado alguma lentidão, mas nada muito grande.

Agora geramos o relatório para um pedido bastante grande e o relatório levou 10 horas para gerar.

Avaliando o código, percebi que a lentidão acontece no método MergeCell. O tempo de execução dele cresce exponencialmente com o relatório. Nesse caso foram necessários mais de 10 mil merges, por isso o tempo.

Ao avaliar o código do método, vi que a lentidão ocorre na validação se a célula já teve um merge.
Comentei esse trecho do código e o relatório gerou em 2 minutos.

Seria possível alguma melhora no desempenho desse método?
Pensei em talvez validar a duplicidade do merge apenas ao final do relatório e não a cada nova instrução.

Uso da função EncodeUTF8()

Nas proximidades da linha 3657, não está sendo testado a chamada a funcão EncodeUTF8(aString[nCont][1]) retornar NIL, causando erro na linha se a conversão para UTF8 falhar.

Celular com borda e merge

Primeiramente parabens pelo projeto!

Eu não to encontrando uma forma de aplicar a borda em uma celula que possui merge, por exemplo o seguinte codigo gera o seguinte resultado:

image

A borda esta sendo aplicada como se fosse apenas uma celula

image

Nome Formato Tabela

Quando formato tabela
Se o nome da primeira linha não for o mesmo nome da coluna da tabela, mostra erro ao abrir o arquivo no excel.

Definir tipo da coluna

Olá, estou lendo um excel pronto para importar alguns dados, existe uma coluna data que sempre me retorna como numero, como eu posso converte-la para data?

Não consegue pegar imagem do repositório do protheus

Estou tentando fazer um fonte meu pegar as imagens dos produtos no repósitórios do protheus através do campo B1_BITMAP, porém ele não consegue achar a imagem vinculada ao produto no repositório do protheus, vc tem alguma idéia de como fazer ele pegar a imagem através deste campo, no repositório do protheus?

Erro ao anexar imagem ao excel

Boa tarde Saulo,

Antes de mais nada, parabéns pelo excelente trabalho. A sua classe YEXCEL é excelente.

Estou tentando adicionar uma imagem ao Excel, e ele não está reconhecendo a estrutura salva no xml após a conversão.
Efetuando debug do método addImg() constatei que ele faz todo o processo corretamente, copiando a imagem para o diretório no servidor, e adicionando na estrutura do XLM, mas ao abrir a planilha o Excel não reconhece a estrutura como válida, e ao resolver a estrutura ele "arranca" a imagem.

Você já se deparou com isso?

Desde já agradeço pela atenção.
Arnaldo R. Junior

Como modificar o tipo da célula?

Olá Saulo,

É possível modificar o tipo da coluna? Somente o tipo data que estou conseguindo deixar no tipo data, as outras colunas estão ficando como tipo "Geral", estou precisando deixar as colunas no tipo correto, por exemplo campo numérico como numérico e caracter como caracter.

Poderia ajudar?

Agradeço desde já.

Erro ao iniciar leitura de arquivo

Ao instanciar YExcel():new(,"E:\TESTE1600ITENS.xlsx"), sistema está gerando errolog apresentando:

variable is not an object on LERCHVSTYS(YEXCEL.PRW) 14/09/2022 16:56:44 line : 926

[TOTVS build: 7.00.210324P-20220608]
Called from YEXCEL:NEW(YEXCEL.PRW) 14/09/2022 16:56:44 line : 430
Called from IMPORTAR(TAIMPPROD.PRW) 14/09/2022 16:33:23 line : 257
Called from {|LEND| IMPORTAR( OPROCESS ) }(TAIMPPROD.PRW) 14/09/2022 16:33:23 line : 170
Called from {|| EVAL(SELF:BACTION,@self:LEND,@self),SELF:LEND := .T. ,SELF:ODLG:END()}(MSNEWPROC.PRW) 08/06/2022 16:53:24 line : 66
Called from ::MSDIALOG:ACTIVATE
Called from MSNEWPROCESS:ACTIVATE(MSNEWPROC.PRW) 08/06/2022 16:53:24 line : 68
Called from U_TAIMPPROD(TAIMPPROD.PRW) 14/09/2022 16:33:23 line : 171
Called from SIGAIXB(APLIB190.PRW) 08/06/2022 16:53:22 line : 250
Called from __EXECUTE(APLIB090.PRW) 08/06/2022 16:53:22 line : 656
Called from MDIEXECUTE(APLIB260.PRW) 08/06/2022 16:53:22 line : 924

oStyle está como nulo.

Informacoes importantes:

Build AppServer: 7.00.210324P-20220608 - 64 bits
Appserver version: 20.3.0.10
Release do RPO: 12.1.033
Versão da Lib:20220613
Data da Lib: 20220608_165254
Release do dicionário: 12.1.033
Dicionário em Banco de Dados

Erro ao executar o exemplo

Ao executar para testes, gerou erro na linha 6338.
Não consegui identificar o motivo.

Agradeço a ajuda.

Carregar imagens em um arquivo

Ao tentar adicionar mais de uma imagem ele carrega a mesma imagem repetida diversas vezes, não há suporte para mais de uma imagem no mesmo arquivo ?
Testado no Protheus 12.1.025 e 23 um com dicionário no banco e outro não respectivamente.
MenuTest.zip

teste.zip

Segue fontes e imagens

Estilos não sendo aplicados

Ao aplicar um estilo ele não é aplicado, ele aplica o último estilo utilizado e não o que está sendo passado, no arquivo exemplo a primeira e quarta linha deveriam ter a cor de fundo da célula com a cor azul e fonte branca, porém é aplicada a cor branca na célula e fonte azul das linhas 2 e 3.

Testado no Protheus 12.1.025 e 23 um com dicionário no banco e outro não respectivamente.

MenuTest.zip

Melhora do desempenho

Amigo, estou sentindo lentidão em planilhas com mais de 2500 linhas, existe alguma forma de melhorar a performance.?

Testei incluindo valores nas celulas com oTabela:Cell("E1_FILIAL" ,(cAliasXML)->E1_FILIAL) e depois com oExcel:Pos(1,1):SetValue((cAliasXML)->E1_FILIAL), nesse segundo exemplo um pouco mais rápido mas ainda com menor desempenho do que a classe FWMSExcel().

Tem como trabalha em desempenho?

Exemplo de leitura

Gostaria de saber se é possível deixar um exemplo de leitura como o "Hello Word"?

Multiple languages from SX3

Hi, I changed some lines of your code to use it on different languages. Alias2Tab Line 6271:

do case
case __LANGUAGE == 'SPANISH'
cNomeCampo := allTrim(getSx3Cache(cCampo, 'X3_TITSPA'))
case __LANGUAGE == 'ENGLISH'
cNomeCampo := allTrim(getSx3Cache(cCampo, 'X3_TITENG'))
otherwise
cNomeCampo := allTrim(getSx3Cache(cCampo, 'X3_TITULO'))
end

Best regards.

Mensagem: O Excel concluiu a validação e o reparo do nível de arquivo. Talvez algumas partes da pasta de trabalho tenham sido reparadas ou descartadas.

Olá, primeiramente, gostaria de agradecer pelo projeto disponibilizado para uso. Muito bom, parabéns.

Estou tentando utilizar no office 365, e está retornado a seguinte mensagem ao tentar abrir o arquivo excel editado:

"O Excel concluiu a validação e o reparo do nível de arquivo. Talvez algumas partes da pasta de trabalho tenham sido reparadas ou descartadas."

Está gravando normalmente no arquivo .xlsx, só única questão que não consegui identificar é que retorna essa mensagem, parece que corrompe o arquivo e o excel repara o arquivo.

Poderia me ajudar ou dar alguma dica o que pode estar ocorrendo?

Uma questão é que achei que poderia ser algum bloqueio de segurança do excel, adicionei como locais confiáveis o diretório que está salvo a planilha, mas mesmo assim continua o problema.

Desde já agradeço.
image
image

Erro ao usar a classe em Job

Bom dia Saulo.

Já faz algum tempo que usamos a classe para gerar relatórios em um Job, porém após a ultima atualização que fizemos no Protheus ela parou de funcionar.

O primeiro erro foi:
Invalid GetTempPath() client call in JOB. in file E:\build-dir\TP11-OF20310-TECXWIN64\interface\srvfunctions.inl at line 356
on YEXCEL:SAVE(YEXCEL.PRW) 16/11/2023 08:47:46 line : 5777

Consegui contornar passando o caminho para salvar o arquivo na chamada do método Gravar().

Porém apareceu o segundo erro:
Function CpyS2T() isn't available in JOB. in file E:\build-dir\TP11-OF20310-TECXWIN64\advpl\arqdirfuncs.inl at line 433
on YEXCEL:SAVE(YEXCEL.PRW) 16/11/2023 08:47:46 line : 6168

Aparentemente essas duas funções não podem ser usadas dentro de um Job. Tens alguma ideia do que poderia ser feito para contornar essa situação?

Abraço!

Help linhas e colunas

Estou preenchendo linhas e colunas com valores de uma matriz, mas precisaria a cada loop voltar o valor da Linha ao inicio e só mudar a coluna, só que do segundo loop em diante as linhas vão sendo somadas., qual parametro altero? já tentei adimension mas não deu certo

Sugestao - Leitura XLSX: Valor Default

Sugiro a seguinte implementação: Caso célula esteja em branco, deve ser atribuído como retorno de GetValue um valor vazio do tipo daquela célula.

OBS: Isto não pode impactar o cenário onde existem linhas vazias.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.