java读取Excel两种格式 xls和xlsx中用到的方法解析

读取后缀首先解析式上传文件的格式是不是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格式很麻烦。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值