前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java读取excel文件单元格英文出现乱码问题的解决方法

java读取excel文件单元格英文出现乱码问题的解决方法

作者头像
小小鱼儿小小林
发布2020-06-24 11:48:33
1.6K0
发布2020-06-24 11:48:33
举报
文章被收录于专栏:灵儿的笔记

小编今天测试读取excel文件,并且取其中的几个单元格作为文件名称的时候,发现文件名出现了乱码,毫无疑问,肯定就是读取excel的时候,取出来就出现了乱码,如图所示

excel原单元格数据,如图所示

首先这里不是中文乱码的问题,反而是英文的时候出现乱码,

然后查阅了许多网上的解决办法,最终最好的解决办法是,在读取excel 的时候,

加上WorkbookSettings,代码如下所示

代码语言:javascript
复制
WorkbookSettings workbookSettings = new WorkbookSettings();
            workbookSettings.setEncoding("ISO-8859-1");
            Workbook wb= Workbook.getWorkbook(new File("D:\\excel\\111.xls"),workbookSettings); 

完整测试代码如下

代码语言:javascript
复制
package com.jxlgnc.demo.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.WorkbookSettings;


/**
 * Created by yjl on 2018-07-18.
 */
public class GetExcelInfo {
    /*public static void main(String[] args) {
        GetExcelInfo obj = new GetExcelInfo();
        // 这个是excel数据文件
        File file = new File("E:/111.xls");
        //obj.readExcel(file);
        try {
            //得到所有数据
            List<List<String>> allData=readExcel2(file);
            System.out.println(allData);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }*/


    // 去读Excel的方法readExcel,该方法的入口参数为一个File对象
    public static void readExcel(File file) {
        try {
            // 创建输入流,读取Excel
            InputStream is = new FileInputStream(file.getAbsolutePath());


            // jxl提供的Workbook类
            //Workbook wb = Workbook.getWorkbook(is);//这样会出现乱码,改成下面的这种形式

            WorkbookSettings workbookSettings = new WorkbookSettings();
            workbookSettings.setEncoding("ISO-8859-1");
            Workbook wb= Workbook.getWorkbook(is,workbookSettings); 


            // Excel的页签数量
            int sheet_size = wb.getNumberOfSheets();
            for (int index = 0; index < sheet_size; index++) {
                // 每个页签创建一个Sheet对象
                Sheet sheet = wb.getSheet(index);
                // sheet.getRows()返回该页的总行数
                for (int i = 0; i < sheet.getRows(); i++) {
                    // sheet.getColumns()返回该页的总列数
                    for (int j = 0; j < sheet.getColumns(); j++) {
                        String cellinfo = sheet.getCell(j, i).getContents();
                        System.out.println(cellinfo);
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    /**
     * 获取数据
     * @param file
     * @return
     * @throws Exception
     */
    public static List<List<String>> readExcel2(File file) throws Exception {

        // 创建输入流,读取Excel
        InputStream is = new FileInputStream(file.getAbsolutePath());
        // jxl提供的Workbook类
        //Workbook wb = Workbook.getWorkbook(is);//这样会出现乱码,改成下面的这种形式

            WorkbookSettings workbookSettings = new WorkbookSettings();
            workbookSettings.setEncoding("ISO-8859-1");
            Workbook wb= Workbook.getWorkbook(is,workbookSettings); 



        // 只有一个sheet,直接处理
        //创建一个Sheet对象
        Sheet sheet = wb.getSheet(0);
        // 得到所有的行数
        int rows = sheet.getRows();
        // 所有的数据
        List<List<String>> allData = new ArrayList<List<String>>();
        // 越过第一行 它是列名称
        for (int j = 1; j < rows; j++) {

            List<String> oneData = new ArrayList<String>();
            // 得到每一行的单元格的数据
            Cell[] cells = sheet.getRow(j);
            for (int k = 0; k < cells.length; k++) {

                oneData.add(cells[k].getContents().trim());
            }
            // 存储每一条数据
            allData.add(oneData);
            // 打印出每一条数据
            //System.out.println(oneData);

        }
        return allData;

    }
}

参考文章链接:https://www.cnblogs.com/wattone/archive/2010/05/04/1727314.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档