首先解析式上传文件的格式是不是xls和xlsx格式的,
获取到之后得到 Workbook对象
Sheet sheet = book.getSheetAt(0);// 获得第一个工作表对象
int column= sheet.getRow(0).getPhysicalNumberOfCells(); //获取列
这里的.getRow(0)是获取的第1行的row对象,通过这个获取excel的列数
int rows = sheet.getPhysicalNumberOfRows();//获取行
直接通过表对象sheet获取excel里面所有的行数
如果你的列数是固定的其实可以直接写死,然后通过循环存入数据库
for (int i = 0; i < rows ; i++) { //行
for (int j = 0; j < column; j++) { //列
//这里获取的是一个单元格对象表示 第i行第j列的单元格
Cell cell=sheet.getRow(i).getCell(j);
//通过单元格获取单元格里面的文本
String text=cell.getStringCellValue().toString();
}
}
但是这里面有个问题 !!!
如果你的单元格里面是纯数字的话那么会抛出一个异常报错Cannot get a text value from a numeric cell
所以在取之前要设置一下单元格数据的类型
修改如下:
for (int i = 0; i < rows ; i++) { //行
for (int j = 0; j < column; j++) { //列
Cell cell=sheet.getRow(i).getCell(j);
//设置单元格为String类型
cell.setCellType(1); //也可以写成cell.setCellType(Cell.CELL_TYPE_STRING);
//设置完后再取数据
String text=cell.getStringCellValue().toString();
}
}
这里如果有其他类型还得转换所以最好写一个工具类:
/* *
* 根据Cell类型设置数据
*
* @param cell 单元格对象
* @return
* @author wzg
*/
private Object getCellFormatValue(Cell cell) {
Object cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERIC
case Cell.CELL_TYPE_FORMULA: {
// 判断当前的cell是否为Date
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则,转化为Data格式
// data格式是带时分秒的:2013-7-10 0:00:00
// cellvalue = cell.getDateCellValue().toLocaleString();
// data格式是不带带时分秒的:2013-7-10
Date date = cell.getDateCellValue();
cellvalue = date;
} else {// 如果是纯数字
cell.setCellType(1);
// 取得当前Cell的数值
//cellvalue = String.valueOf(cell.getNumericCellValue());
cellvalue=cell.getStringCellValue();
}
break;
}
case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING
// 取得当前的Cell字符串
cellvalue = cell.getRichStringCellValue().getString();
break;
default:// 默认的Cell值
cellvalue = "";
}
} else {
cellvalue = "";
}
return cellvalue;
}
跟新之后的如下:
for (int i = 0; i < rows ; i++) { //行
for (int j = 0; j < column; j++) { //列
Cell cell=sheet.getRow(i).getCell(j);
Object obj=getCellFormatValue(cell); //这就是单元格里面的内容了,可以直接存入数据库
}
}
PS另外这里用到的jar包之类的截图:
这个apache的包支持xls和xlsx的我之前做项目时候用的jxl.jar 这个包只支持xls的文档,如果要支持xlsx还得客户自己进去另存为xls格式很麻烦。