Clipper On Line • Ver Tópico - Xls nativo - remover apóstrofo!

Xls nativo - remover apóstrofo!

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Xls nativo - remover apóstrofo!

Mensagempor Ceb » 21 Fev 2021 15:59

Boa tarde!

Uso o Xharbour 1.2.1 e há muito crio XLS nativamente com ele. Para isso, utilizo de um exemplo que acho ter baixado por aqui, onde não necessito de nenhuma ferramenta adicional.

Porém, me deparei com um problema: preciso que o XLS criado seja importado em um outro sistema. O arquivo é carregado normalmente, tanto no Excel como no LibreOffice, porém rejeitado por esse outro sistema.

Após analisar, percebi que os campos numéricos tem um apóstrofo (') no início dele, o que impede a importação do mesmo.

Segue em anexo o exemplo que uso e foto do "danado" do apóstrofo que está impedindo tal importação.

Desde já, agradeço caso alguém possa me dar uma ideia de como remover o apóstrofo e continuar a exportar nativamente meu arquivo XLS.

Att,

Ceb
Anexos
xls.rar
(2.57 KiB) Baixado 42 vezes
xls.png
Ceb
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 16 Set 2015 09:55
Cidade/Estado: Alegre/ES
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 21 Fev 2021 17:12

Olá!
Faltou o XLS do outro sistema ou os dados a serem importados.
Quem está gerando ele com apostrofo ?
Olhei e o array no exemplo é numérico.
O XLS é gerado Ok e o outro sistema coloca o apostrofo quando importa ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Ceb » 21 Fev 2021 17:45

Ei Itamar, obrigado por responder.

O arquivo pedido.xls é gerado pelo programa xls.prg que anexei anteriormente.

Quando tento importar o pedido.xls no outro sistema, acusa erro e aborta. Daí, tenho que abrir o pedido.xls e remover os apóstrofos, salvar e só então consigo importá-lo no outro sistema.

Segue o arquivo pedido.xls gerado pelo xls.prg que contem o apóstrofo.

Desde já, muito grato pela ajuda.

Att,

Ceb
Anexos
pedido.xls
(203 Bytes) Baixado 46 vezes
Ceb
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 16 Set 2015 09:55
Cidade/Estado: Alegre/ES
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 21 Fev 2021 19:01

Olá!
Quando tento importar o pedido.xls no outro sistema, acusa erro e aborta.

O problema é saber como o "outro sistema" trabalha.
Abri aqui pelo LibreOffice no Linux e está ok.
Screenshot_20210221_185711.png


Pq vc salva o XLS em X versão do excel. Precisa saber qual versão do excel o "outro sistema" vai importar.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Ceb » 21 Fev 2021 19:27

Itamar, boa noite!

O sistema de pedido eletrônico de uma distribuidora de medicamentos importa arquivo gerado no Excel 2007, 2013 e no online, importa até se for criado no LibreOffice!

O problema é que o arquivo gerado em xHarbour pelo programa xls.prg tem um apóstrofo (') na frente dos campos numéricos. Daí, o sistema da distribuidora não importa de nenhuma versão, a não ser que o apóstrofo seja removido.

Conforme sua imagem, o arquivo é aberto normalmente tanto no Excel como no LibreOffice, porém tem o apóstrofo! Se vc clicar F2 no campo ele tbm aparece. Testa aí por favor.

Eu preciso alterar o xls.prg e o xls.ch para gerar campo numérico sem o "danado" do apóstrofo (') na frente.

Att,

Ceb.
Anexos
xls.erro.png
Ceb
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 16 Set 2015 09:55
Cidade/Estado: Alegre/ES
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 21 Fev 2021 22:06

Olá!
Agora entendi.
Olhei aqui. Os sistemas(LibeOffice/Excel) detectam se é numero ou letra e quando é numero coloca o apostrofo.
Se colocar:
 ' "900" '

Será que vai ler ?
Se colocar uma letra na frente do numero não aparece também.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 21 Fev 2021 22:33

Olá!
É um problema comum, veja.
https://pt.extendoffice.com/documents/excel/2868-excel-remove-leading-apostrophe.html#a3
Isso é o excel que coloca mesmo, quando abre o XLS (BIFF)
Acho que achei aqui a solução... testando...

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 21 Fev 2021 23:12

Olá!
Mais um macete para importar para o excel.
Não precisa de nada, apenas criar o arquivo dessa forma:
Function main
Local nHandle
nHandle := FCREATE("pedido.xls")
FWRITE(nHandle,"<HTML><BODY><table>")
FWRITE(nHandle,"<tr><th>barra</th><th>qtd</th></tr>")
FWRITE(nHandle,"<tr><td>17123876123</td><td>1</td></tr>")
FWRITE(nHandle,"<tr><td>76313123987</td><td>1</td></tr>")
FWRITE(nHandle,"</table></body></html>")
FCLOSE(nHandle)


O formato padrão achei na internet com mais firulas, deixar aqui guardado.
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; chairset=windows-1252">
<!--[if gte mso 9]><xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>Sheet1</x:Name> <x:WorksheetOptions> <x:Selected/> <x:Panes> <x:Pane> <x:Number>3</x:Number> <x:ActiveRow>3</x:ActiveRow> </x:Pane> </x:Panes> <x:ProtectContents>False</x:ProtectContents> <x:ProtectObjects>False</x:ProtectObjects> <x:ProtectScenairios>False</x:ProtectScenairios> </x:WorksheetOptions> </x:ExcelWorksheet> </x:ExcelWorksheets> </x:ExcelWorkbook> </xml><![endif]-->
</head>
<body>
<table x:str>
<tr>
<td x:num width=64>1</td>
</tr>
<tr>
<td x:num>2</td>
</tr>
<tr>
<td x:num>3</td>
</tr>
</table>
</body>
</html>


Salvar com a extensão .XLS

Esse outro cabeçalho do Itaú.
<html xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns="http://www.w3.org/TR/REC-html40">


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 22 Fev 2021 00:13

Olá!
exemplo de XML do excel. Importa direto para o Libreoffice e Excel.

<?xml version="1.0" encoding="utf-8"?>
<Workbook
    xmlns="urn:schemas-microsoft-com:office:spreadsheet"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="urn:my-scripts"
    xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:x="urn:schemas-microsoft-com:office:excel"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

    <Worksheet ss:Name="Testing Data">
        <Table>
            <Row>
                <Cell>
                    <Data ss:Type="String">Barra</Data>
                </Cell>
                <Cell>
                    <Data ss:Type="String">Quantidade</Data>                   
                </Cell>
            </Row>
            <Row>
                <Cell>
                    <Data ss:Type="Number">129812981212</Data>
                </Cell>
                <Cell>
                    <Data ss:Type="Number">1</Data>                   
                </Cell>
            </Row>
            <Row>
                <Cell>
                    <Data ss:Type="Number">234812981212</Data>
                </Cell>
                <Cell>
                    <Data ss:Type="Number">5</Data>                   
                </Cell>
            </Row>
        </Table>
    </Worksheet>

</Workbook>


Se for abrir pelo LibreOffice salvar .XLS e no Excel salvar com XML.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Ceb » 22 Fev 2021 10:48

Itamar, bom dia!

Testei suas sugestões, mas continuo na dependência do Excel ou Libreoffice. Assim, já até faço gerando um CSV. Mas o que realmente queria é gerar pelo xls.prg sem o apóstrofo, pq aí sim eu não teria dependência do Excel/LibreOffice.

Conforme sua sugestão, usando o xls.prg, coloquei na frente do código de barras a letra B, ficando assim: B7891058021580. Assim gerou sem o apóstrofo ('). Agora preciso remover esse B do arquivo gerado, pedido.xls. Tentei MemoRead + StrTran + MemoWrit, até removeu, mas corrompeu o arquivo.

Segue o arquivo pedido.xls original e o pedidoA.xls (alterado pelo MemoRead + StrTran + MemoWrit). Segue tbm print comparando a estrutura de ambos.

Sem mais, agradeço.

Att,

Ceb
Anexos
pedidos.strtran.png
pedidos.rar
(409 Bytes) Baixado 25 vezes
Ceb
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 16 Set 2015 09:55
Cidade/Estado: Alegre/ES
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Xls nativo - remover apóstrofo!

Mensagempor Kapiaba » 22 Fev 2021 11:47

Ola, tente assim:

#Include "FiveWin.ch"

FUNCTION PrintDosForWin()

   LOCAL cTexto     := ""
   LOCAL ON_GRANDE  := CHR(27) + CHR(33) + CHR(16) // Para Impresoras Epson
   LOCAL OFF_GRANDE := CHR(27) + CHR(33) + CHR(01) // Para Impresoras Epson
   LOCAL cPrinter   := GetDefaultPrinter()    // Seleciona la Impresora Por Defecto de Windows
   //LOCAL CRLF       := CHR(13) + CHR(10)
   LOCAL cFileName  := "TEXTO.PRN"

   cTexto += "Esta es la primera linea del texto" + CRLF
   cTexto += Replicate( "*-", 20 ) + CRLF
   cTexto += ON_GRANDE + "LETRAS GRANDES" + OFF_GRANDE + CRLF
   cTexto += "Esta es otra linea de texto..." + CRLF
   cTexto += PADL( "Izquierza", 40 ) + CRLF
   cTexto += PADC( "CENTRALIZADO", 40 ) + CRLF
   cTexto += PADR( "Derecha", 40 ) + CRLF
   cTexto += PADC( "< Linea Final >", 40, "-" ) + CRLF

   If WriteStream( cFileName, cTexto )

      // Envia la Impresion al Spool de Windows
      // PrintFileRaw( cPrinter, cFileName, "Impresion En Formato DOS desde Windows" )

      WinExec( "Notepad.exe " + cFileName )

      FERASE( cFileName )

   EndIF

RETURN NIL
// Esta Funcion la encontre por ahi...
FUNCTION WriteStream( cFile, cStream )

   LOCAL nHandle := FCreate( cFile )

   IF FError() <> 0
      RETURN( .F. )
   ENDIF

   FWrite( nHandle, cStream, Len(cStream) )

   FClose( nHandle )

RETURN ( FError() == 0 )


Abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1766
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 311 vezes
Mens.Curtidas: 119 vezes

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 22 Fev 2021 14:49

Olá!
Quem coloca o apostrofo é o Excel, que coloca nos campos tratando como texto.
Se mexer no arquivo, altera os cálculos e danifica o XLS.
Precisa procurar na internet o modelo adequado para gerar o XLS com campos numéricos, data, currency, etc.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Xls nativo - remover apóstrofo!

Mensagempor Jairo Maia » 22 Fev 2021 16:36

Fazendo o teste com o arquivo da sugestão do Itamar, com a letra "B" na frente, dessa forma deu pra remover o "B" e o arquivo abriu. Usei FCreate(), FOpen() e FWrite() porque não altera o formato do arquivo, enquanto MemoRead() e MemoWrit() quando salvam salvam no formato OEM. Deu certo, veja se ajuda:

Compilar usando: HBMK2 Teste.Prg xhb.hbc

#include "FileIO.Ch"

nNewFile := FCreate( "Pedido1.Xls" )  // cria o arquivo a salvar o conteúdo alterado

nHadler := FOPEN( "Pedido.Xls", 2 )  // abre o arquivo no modo leitura e gravação

nFileSize := FSeek( nHadler, 0, FS_END )  // pega tamanho do arquivo

FSeek( nHadler, 0, FS_SET )  // reposiciona o cursor no inicio do arquivo

cBuffer := Space( nFileSize )  // define o tamanho de cBuffer

FREAD( nHadler, @cBuffer, nFileSize )  // carrega o arquivo em cBuffer

cBuffer := StrTran( cBuffer, [B789], " 789" )  // remove o B por um espaço (não altera o LEN do arquivo)

FWRITE( nNewFile, cBuffer, nFileSize )  // grava o novo arquivo

FClose( nNewFile )  // fecha os Handlers...

FCLOSE( nHadler )


Em Tempo: Assim também funcionou (com Hb_MemoRead() e Hb_MemoWrit():
cBuffer := Hb_MemoRead( "Pedido.Xls" )

cBuffer := StrTran( cBuffer, [B789], " 789" )  // remove o B por um espaço (não altera o LEN do arquivo)

Hb_MemoWrit( "Pedido1.Xls", cBuffer )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Xls nativo - remover apóstrofo!

Mensagempor gilbertosilverio » 22 Fev 2021 20:26

Ola Amigos,

Gero meus relatórios no excel desta maneira, simplesmente salvo o arquivo DBF como XLS, e ate hoje funciona que e uma maravilha...

FUNCTION EXCEL_EXPEDICAO()
    PRIVATE ARQ, aARQ:={}, cName, oBAR, cOldDrive, cOldPath, NOVODIR, oBAR
    X_SAVEPATH()
    MONTA_NA_TELA()
    IF EMPTY(cNAME)
       X_RESTOREPATH()
       RETURN NIL
    ENDIF
    ARQ:=NOVODIR+RETIRABRANCO(alltrim(cName))+[.xls]

    TITULO:={ [N_NFe],[RAZAO],[Cidade],[Bairro],[CEP],[Volume],[Valor],[Obser],[OK] }
    aAdd(aARQ, { TITULO[1]    ,  "C",    10,0 } )
    aAdd(aARQ, { TITULO[2]    ,  "C",    20,0 } )
    aAdd(aARQ, { TITULO[3]    ,  "C",    20,0 } )
    aAdd(aARQ, { TITULO[4]    ,  "C",    20,0 } )
    aAdd(aARQ, { TITULO[5]    ,  "C",    10,0 } )
    aAdd(aARQ, { TITULO[6]    ,  "C",    10,0 } )
    aAdd(aARQ, { TITULO[7]    ,  "N",    12,2 } )
    aAdd(aARQ, { TITULO[8]    ,  "C",    40,0 } )
    aAdd(aARQ, { TITULO[9]    ,  "C",    04,0 } )

    DBCREATE( ARQ, aArq, [DBFNTX], .T. )
    CLOSE DATA
    USE &ARQ NEW EXCLUSIVE
    C:=1 ; CONTA:=0

    oBar:=HProgressBar():NewBox( "Imprimindo, "+lTrim(strZERO(C,6))+" De "+lTrim(strZERO(LEN(aNFE_MOTO),6))+" Registro(s)",,,350,,LEN(aNFE_MOTO))

    DO WHILE C <= LEN(aNFE_MOTO)
       DBAPPEND()
       REPLACE N_NFE  WITH aNFE_MOTO[C,1]
       REPLACE RAZAO  WITH SUBSTR(aNFE_MOTO[C,6],1,20)
       REPLACE CIDADE WITH SUBSTR(aNFE_MOTO[C,7],1,20)
       REPLACE BAIRRO WITH SUBSTR(aNFE_MOTO[C,8],1,20)
       REPLACE CEP    WITH aNFE_MOTO[C,9]
       REPLACE VOLUME WITH aNFE_MOTO[C,4]
       REPLACE VALOR  WITH VAL(aNFE_MOTO[C,2])
       REPLACE OBSER  WITH SUBSTR(aNFE_MOTO[C,3],1,40)
       REPLACE OK     WITH SUBSTR(aNFE_MOTO[C,10],1,4)
       C++
       oBar:Step("Imprimindo, "+lTrim(strzero(C,6))+" De "+lTrim(Strzero(len(aNFE_MOTO),6))+" Registro(s)")
    ENDDO
    oBar:CLOSE()
    X_RESTOREPATH()
    Hwg_Msginfo( [Arquivo salvo em: ]+CRLF+CRLF+arq, [Aviso do sistema] ) //= c:\usuario\desktop\nomedoarquivo.xls
RETURN( nil )

FUNCTION MONTA_NA_TELA()
   cName    := [Rel_]+SUBSTR(TIME(),1,2)+[_]+SUBSTR(TIME(),4,2)+[_]+SUBSTR(TIME(),7,2)
   NovoDir  := GetDesktopFolder()+[\]
RETURN NIL

Function GetDesktopFolder()
   local objShell, GetDesktopFolder
   objShell := CreateObject("WScript.Shell")
   GetDesktopFolder := objShell:SpecialFolders:Item("Desktop")
   objShell := nil
RETURN GetDesktopFolder

gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Xls nativo - remover apóstrofo!

Mensagempor Itamar M. Lins Jr. » 22 Fev 2021 21:10

Olá!
Gero meus relatórios no excel desta maneira, simplesmente salvo o arquivo DBF como XLS, e ate hoje funciona que e uma maravilha...

Tem algumas maneiras, mas não é o excel que vai ler, é o tal programa dele lá.
Ai acredito que o Jairo resolveu a questão, mas gostei dessa forma também.

Saudações,
Itamar M. Lins Jr.
.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6960
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 313 vezes
Mens.Curtidas: 508 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro