saulogm / advpl-excel

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

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Uso da função EncodeUTF8()

marcos-abrahao opened this issue · comments

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.

THREAD ERROR ([3708], adalberto.xavier, BKCSNOTAS0564) 14/07/2020 11:13:31
type mismatch on + on YEXCEL:XLS_SHAREDSTRINGS(YEXCEL.PRW) 11/06/2020 09:34:58 line : 3657

Oi Marcos
Poderia me passar como simular esse problema.
Se você já conseguiu identificar como solucionar esse problema também seria bem vindo.

A principio essa lista do tHashMap da linha 2657 deveria ter apenas caracteres, não fazendo sentido eu verificar o seu conteúdo.

Boa tarde!
Uma tabela continha a string "LINDIC�SSIA SILVA DE CASTRO " e ocasionou o erro.
Fiz o seguinte para contornar:

Method xls_sharedStrings(nFile) class YExcel
Local nCont
Local aString
Local cRet := ""
Local cEncod:= ""
::oString:list(@astring)
aSort(aString,,,{|x,y| x[2]<y[2] })
cRet += ''
cRet += ''
FWRITE(nFile,cRet)
cRet := ""
For nCont:=1 to Len(aString)
cRet += ''
cEncod := EncodeUTF8(aString[nCont][1])
If cEncod == Nil
MsgStop(aString[nCont][1],"Yexcel")
cEncod := ""
EndIf
cRet += ''
cRet += ''
FWRITE(nFile,cRet)
cRet := ""
Next
cRet += ''
FWRITE(nFile,cRet)
cRet := ""
Return cRet

Com base na sua sugestão fiz o seguinte ajuste. Já subir para a versão principal.

		cTexto	:= EncodeUTF8(aString[nCont][1])
		If Valtype(cTexto)!="C"
			cTexto	:= aString[nCont][1]
			cTexto	:= Replace(cTexto,chr(129),"")
			cTexto	:= Replace(cTexto,chr(141),"")
			cTexto	:= Replace(cTexto,chr(143),"")
			cTexto	:= Replace(cTexto,chr(144),"")
			cTexto	:= Replace(cTexto,chr(157),"")
			cTexto	:= EncodeUTF8(cTexto)
			If Valtype(cTexto)!="C"
				cTexto	:= ""
			EndIf
		EndIf
		cRet	+= '<t><![CDATA['+cTexto+']]></t>'

ajustado.

Obrigado Saulo! Perfeito!