easyexcel icon indicating copy to clipboard operation
easyexcel copied to clipboard

导出到excel中 <0x01> 丢失

Open zhongliangjian opened this issue 3 years ago • 5 comments

导出到excel文件中,从excel中复制出来<0x01>已经变成了?号字符。导出到csv文件就不会,现在是导出到excel,这个<0x01>字符丢失了 image

zhongliangjian avatar Aug 03 '22 06:08 zhongliangjian

测试了一下没有复现这个问题,给个 demo 看看?

juzi214032 avatar Aug 06 '22 10:08 juzi214032

测试了一下没有复现这个问题,给个 demo 看看? image image 格式丢失了 @juzi214032

zhongliangjian avatar Aug 11 '22 03:08 zhongliangjian

@zhongliangjian 这里写入 \u0001 的作用是什么?这个预期在excel显示什么?是这个编码字符还是要显示 \u0001

juzi214032 avatar Aug 11 '22 12:08 juzi214032

\u0001是一个特殊unicode字符,Excel 显示不出来的,建议把这种不可见字符过滤掉,csv能显示是因为csv是纯文本数据,编辑器支持就可以识别

juzi214032 avatar Aug 11 '22 12:08 juzi214032

这个是通过加密算法出来的字符,不能过滤,excel显示不出来不要紧,主要是格式不能丢失,导出到excel中,然后复制到编辑器,这个字符不能丢失掉,我昨天试了一下,用原生poi xls格式是可以导出到excel的,虽然还是显示问号,但是复制出来格式不会丢失,但是导出到新版本的xlsx格式就会丢失,但是xls数据量太小了,满足不了需求 @juzi214032

zhongliangjian avatar Aug 12 '22 04:08 zhongliangjian

根本原因是xls和xlsx的底层编码格式不同:

xlsx格式的基础是xml,小于32以下的字符只有3个是xml可用的,分别是9,10和13(Tab,回车+换行),如果出现其它不可见字符那么将会使整个文件无法打开,打开xml文件时大致会提示xmlParseCharRef: invalid xmlChar value 1,为了不破坏整个文件POI将不可见字符输入为【?】问号

xls格式可以输出是因为xls是BIFF编码的一种纯二进制文件,BIFF字符串为ASCII或UTF16-LT 编码,所以不存在不可见字符的问题

最好的处理方式是将加密后的数据进行一次base64即可,并且几乎所有的加解密都需要一次base64处理

wangguanquan avatar Mar 20 '23 01:03 wangguanquan

最新版本应该能解决这个问题 3.3.2

gongxuanzhang avatar Jun 12 '23 12:06 gongxuanzhang