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!