saulogm / advpl-excel Goto Github PK
View Code? Open in Web Editor NEWClasse 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
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
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.
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.
Ao executar para testes, gerou erro na linha 6338.
Não consegui identificar o motivo.
Agradeço a ajuda.
A classe permite a leitura de arquivos .xls ?
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.
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á.
Bom dia Saulo ,
por gentileza pode disponibilizar o pacote pra espanhol? TTTS na versão 12.1.17
Atenciosamente
Nahim Terrazas - Bolivia
Olá baixei a ultima versão e ao rodar o teste aparece a seguinte mensagem:
InterFunctionCall: cannot find function h_xls_sheet in AppMap
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?
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
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
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!
Gostaria de saber se é possível deixar um exemplo de leitura como o "Hello Word"?
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
Estou fazendo testes com a classe e a mesma não esta gravando os textos somente valores numericos
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.
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.
Olá, parabéns pela excelente biblioteca.
As células que sofrem merge não estão respeitando a borda ALL, testei aplicando borda antes e depois de fazer merge, mas o arquivo só fica com borda na primeira célula.
No sheets1 não esta gerando registro dessas celulas. Mas imagino que deveria gerar com conteúdo vazio apenas indicando o style pela tag s igual a celular que vai receber o conteúdo.
Exemplo sem borda
<c r="C25" s="10" t="inlineStr"> <is> <t xml:space="preserve"> <![CDATA[RELE AUXILIAR 12V 4S 80A ]]> </t> </is> </c> <c r="G25" s="10" t="inlineStr"> <is> <t xml:space="preserve"> <![CDATA[85364100 ]]> </t> </is> </c>
Marcando a borda manual e salvando
<c r="C25" s="17" t="s"> <v>36</v> </c> <c r="D25" s="17"/> <c r="E25" s="17"/> <c r="F25" s="17"/> <c r="G25" s="14" t="s"> <v>37</v> </c>
O programa altera a estrutura, mas gera os registros das celulas.
estou usando assim
nBordaAll := oExcel:Borda("ALL") oStyleItemTabela := oExcel:NewStyle():Setborder(nBordaAll)
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.
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?
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
Segue fontes e imagens
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?
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.