问题如下。在系统中使用poi导出Excel,在别人的电脑上2010版的Excel中可以正常打开,在我本人电脑上的2003打开就是乱码,一开始查找资料是poi的jar包版本问题。系统上的poi jar包是3.0.整个系统的jar包不敢乱更换,所以只能别的方式修改。在Action中有转码语句:
res.setHeader("Content-disposition", "attachment; filename=" + new String((register.getCorporateName()+".xls").getBytes("gbk"), "iso8859-1"));
网上说有人用这个解决了乱码问题。但是我的不行啊。
后来发现这个语句是把gbk转成iso格式的。但是系统的编码我们是utf-8于是改成
String((register.getCorporateName()+".xls").getBytes("utf-8"), "iso8859-1"));
乱码问题不能解决。
有人说可以用cell.setEncoding(HSSFCell.ENCODING_UTF_16); 这条语句解决问题。但是我在Action中的cell对象没有此方法。。。。。。
所以来求大神帮助了。望大神不吝赐教

java中使用poi导出Excel,在2003版Excel中乱码的问题,求大神解答
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 你知我知皆知 2024-08-02 22:24关注
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题可能是因为你的
HSSFWorkbook
或XSSFWorkbook
对象并没有设置正确的编码。你可以尝试以下步骤来解决这个问题:-
在创建工作簿时设置编码:如果你正在使用
HSSFWorkbook
,你需要在构造函数中指定编码(例如String workbookType = "HSSFWorkbook"; HSSFWorkbook wb = new HSSFWorkbook(workbookType, encoding)
)。同样,如果你正在使用XSSFWorkbook
,你需要在构造函数中指定编码(例如String workbookType = "XSSFWorkbook"; XSSFWorkbook wb = new XSSFWorkbook(workbookType, encoding)
)。 -
在读取数据之前设置编码:在处理
Workbook
对象的数据之前,你可以在read
或getSheet
等方法前设置编码。例如:
InputStream in = new FileInputStream(filePath); Workbook workbook = null; try { workbook = WorkbookFactory.create(in); } catch (IOException e) { // handle exception }
- 使用
setUseDefaultEncoder()
和setUseDefaultCharset()
:这将使Workbook
对象自动使用默认的编码。例如:
workbook.setUseDefaultEncoder(); workbook.setUseDefaultCharset(true);
- 如果你正在使用
HSSFWorkbook
,你可以使用HSSFSheet
对象的setSheetName(String sheetName)
方法来重命名工作表,以确保每个工作表都有唯一的编码。
希望这些信息对你有所帮助!
解决 无用评论 打赏 举报 -