David_lou 2014-10-20 05:24 采纳率: 0%
浏览 1288

java中使用poi导出Excel,在2003版Excel中乱码的问题,求大神解答

问题如下。在系统中使用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对象没有此方法。。。。。。
所以来求大神帮助了。望大神不吝赐教

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 22:24
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可能是因为你的HSSFWorkbookXSSFWorkbook对象并没有设置正确的编码。你可以尝试以下步骤来解决这个问题:

    1. 在创建工作簿时设置编码:如果你正在使用HSSFWorkbook,你需要在构造函数中指定编码(例如String workbookType = "HSSFWorkbook"; HSSFWorkbook wb = new HSSFWorkbook(workbookType, encoding))。同样,如果你正在使用XSSFWorkbook,你需要在构造函数中指定编码(例如String workbookType = "XSSFWorkbook"; XSSFWorkbook wb = new XSSFWorkbook(workbookType, encoding))。

    2. 在读取数据之前设置编码:在处理Workbook对象的数据之前,你可以在readgetSheet等方法前设置编码。例如:

    InputStream in = new FileInputStream(filePath);
    Workbook workbook = null;
    try {
        workbook = WorkbookFactory.create(in);
    } catch (IOException e) {
        // handle exception
    }
    
    1. 使用setUseDefaultEncoder()setUseDefaultCharset():这将使Workbook对象自动使用默认的编码。例如:
    workbook.setUseDefaultEncoder();
    workbook.setUseDefaultCharset(true);
    
    1. 如果你正在使用HSSFWorkbook,你可以使用HSSFSheet对象的setSheetName(String sheetName)方法来重命名工作表,以确保每个工作表都有唯一的编码。

    希望这些信息对你有所帮助!

    评论

报告相同问题?