JAVA 读取Excel文件内容

前段时间根据朋友要求需要一个读取Excel文件内容然后填入Word模板中生成Word的功能,
首先看通过Java语言怎么读取Excel里面的内容

1.先定义好读取Excel文件内容的方法,该方法返回的是二维数组。
public static String[][] getDate(File file, int ignoreRows) throws FileNotFoundException, IOException {
List<String[]> result = new ArrayList<String[]>();
int rowSize = 0;//初始化行大小
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file));//读取文件对象获取输入流
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFCell cell = null;//初始化单元格
for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex);
//循环获取单元格的值 第一行不取值
for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
HSSFRow row = st.getRow(rowIndex);
if (row == null) {
continue;
}
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize > rowSize) {
rowSize = tempRowSize;
}
String[] values = new String[rowSize];
Arrays.fill(values, “”);
boolean hasValue = false;
//循环获取行的值
for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
String value = “”;//初始化单元格的值
cell = row.getCell(columnIndex);
if(cell != null){
//cell.setEncoding(HSSFCell.ENCODING_UTF_16);//解决中文乱码
switch(cell.getCellType()){
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
Date date = cell.getDateCellValue();
if(date!=null){
value = new SimpleDateFormat(“yyyy-MM-dd”)
.format(date);
}else{
value="";
}
}else{
value = new DecimalFormat(“0”).format(cell
.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + “”;
}
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
value = “”;
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? “Y”
: “N”);
break;
default:
value = “”;
}
}
if (columnIndex == 0 && value.trim().equals("")) {
break;
}
values[columnIndex] = rightTrim(value);//去除两端的空格
hasValue = true;
}
if (hasValue) {
result.add(values);
}
}
}
in.close();
String[][] returnArray = new String[result.size()][rowSize];
for (int i = 0; i < returnArray.length; i++) {
returnArray[i] = (String[]) result.get(i);
}
return returnArray;
}

//去掉两端的空格
public static String rightTrim(String str) {
if (str == null) {
return “”;
}
int length = str.length();
for (int i = length - 1; i >= 0; i–) {
if (str.charAt(i) != 0x20) {
break;
}
length–;
}
return str.substring(0, length);
}

2. 最后是测试方法,大家可以根据代码内容自己试一下还是挺好用的
public static void main(String[] args) throws Exception {
File file = new File(“C:\Users\xjbh-zt\Desktop\03.xls”);
List<Map<String,Object>> list=new ArrayList<>();
String[][] result = getDate(file,0);
int rowLength = result.length;
for(int i=0;i<rowLength;i++) {
Map<String,Object> map=new HashMap<>();//Excel各个字段名,由用户自己设定并且与Excel里面的列对应
for(int j=0;j<result[i].length;j++) {
System.out.print(result[i][j]+"\t\t");
}
System.out.println();
}
}

3. 该方法需要导入的Jar包
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.springframework.stereotype.Component;

import java.io.;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.
;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值