Página 1 de 2
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 15:59
por Ceb
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
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 17:12
por Itamar M. Lins Jr.
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.
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 17:45
por Ceb
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
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 19:01
por Itamar M. Lins Jr.
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.
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.
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 19:27
por Ceb
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.
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 22:06
por Itamar M. Lins Jr.
Olá!
Agora entendi.
Olhei aqui. Os sistemas(LibeOffice/Excel) detectam se é numero ou letra e quando é numero coloca o apostrofo.
Se colocar:
Será que vai ler ?
Se colocar uma letra na frente do numero não aparece também.
Saudações,
Itamar M. Lins Jr.
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 22:33
por Itamar M. Lins Jr.
Olá!
É um problema comum, veja.
https://pt.extendoffice.com/documents/e ... he.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.
Xls nativo - remover apóstrofo!
Enviado: 21 Fev 2021 23:12
por Itamar M. Lins Jr.
Olá!
Mais um macete para importar para o excel.
Não precisa de nada, apenas criar o arquivo dessa forma:
Código: Selecionar todos
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.
Código: Selecionar todos
<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ú.
Código: Selecionar todos
<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.
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 00:13
por Itamar M. Lins Jr.
Olá!
exemplo de XML do excel. Importa direto para o Libreoffice e Excel.
Código: Selecionar todos
<?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.
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 10:48
por Ceb
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
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 11:47
por Kapiaba
Ola, tente assim:
Código: Selecionar todos
#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.
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 14:49
por Itamar M. Lins Jr.
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.
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 16:36
por Jairo Maia
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
Código: Selecionar todos
#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():
Código: Selecionar todos
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 )
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 20:26
por gilbertosilverio
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...
Código: Selecionar todos
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
Xls nativo - remover apóstrofo!
Enviado: 22 Fev 2021 21:10
por Itamar M. Lins Jr.
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.
.