java读取excel文件单元格英文出现乱码问题的解决方法
小编今天测试读取excel文件,并且取其中的几个单元格作为文件名称的时候,发现文件名出现了乱码,毫无疑问,肯定就是读取excel的时候,取出来就出现了乱码,如图所示
excel原单元格数据,如图所示
首先这里不是中文乱码的问题,反而是英文的时候出现乱码,
然后查阅了许多网上的解决办法,最终最好的解决办法是,在读取excel 的时候,
加上WorkbookSettings,代码如下所示
WorkbookSettings workbookSettings = new WorkbookSettings();
workbookSettings.setEncoding("ISO-8859-1");
Workbook wb= Workbook.getWorkbook(new File("D:\\excel\\111.xls"),workbookSettings);
完整测试代码如下
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
感谢原作者的分享,让技术人能够更快的解决问题