java导入excel表格数据库中_JAVA --- 导入Excel, 将表格中的数据存入数据库中.

框架Spring + Mybatis + SpringMVC.

使用jar包:  poi-ooxml 3.15-beta2  注意: 不同的poi的jar包所带有的功能是不一样的.如果你的项目中使用了其他poi的jar包而导致以下代码在你的项目中提示报错,请自行甄别.

先写一个基础的上传jsp

需要用到两个 js :

jquery-3.3.1.min.js

ajaxfileupload.js

上传Excel

上传Excel

//点击 a 标签, 触发 input 框, 选择要上传的文件

function uploadExcel(){

document.getElementById("excel").click();

}

//注意 input 中的 onchange -- 表名到选中文件之后,会触发方法ajaxFileUpload().

function ajaxFileUpload() {

// 进行ajax 上传.

$.ajaxFileUpload({

url : '/admin/test/importExcel.do',//url.

secureuri : false,//是否启用安全提交,默认为false。

fileElementId : 'excel',//需要上传的文件域的ID,即的ID。

dataType : 'String',//服务器返回的数据类型(有json和String)

data : {/*filetype : "images"*/},// 自定义参数

type: 'post',//当要提交自定义参数时,这个参数要设置成post

success : function(data, status) {

alert("上传成功"+data);

},

error : function(data, status, e) {

alert("上传失败");

}

})

return false;

}

以上, 就只是一个简单的上传页面 , 该页面不仅使用上传Excel, 确切的说, 任何资源的上传都可以用上这个简化版.其中一些参数自行替换成自己的即可.

注意: jsp中的input框中的name名称要和Controller层中指定方法上的参数名称相同:MultipartFile multipartFile ---->

接下来开始Controller的方法:@RequestMapping(value = "/importExcel", method = RequestMethod.POST)

@ResponseBody

public String importExcel(HttpServletRequest request, MultipartFile multipartFile) throws Exception {

//准备List容器进行存储数据

List> ListMap = new ArrayList>();

//利用Workbook接口和判断excel版本创建相应版本 HSSFWorkbook/XSSFWorkbook对象

org.apache.poi.ss.usermodel.Workbook workbook = null;

// 获取上传文件的原始名称

String filename = multipartFile.getOriginalFilename();

//获取文件后缀名称,如果后缀是xls则结果为true,如果为xlsx,则结果为false.

boolean isExcel2003 = filename.toLowerCase().endsWith("xls") ? true : false;

//根据不同版本,创建不同的EXCEL表格. 注意: 有的poi的jar包在这一步是不适用的.如果不适用则只能根据不同文件进行不同的方法处理了.

if (isExcel2003) {

workbook = new org.apache.poi.hssf.usermodel.HSSFWorkbook(multipartFile.getInputStream());

} else {

workbook = new org.apache.poi.xssf.usermodel.XSSFWorkbook(multipartFile.getInputStream());

}

//创建这个EXCEL的一页. 一个工作簿有多个sheet,可以把工作簿就看成一本书, sheet就是页. 每页里面就是一张Excel表格了.

org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0);

//获取EXCEL第一页中(列头)的总列数.

int physicalNumberOfCells = sheet.getRow(0).getPhysicalNumberOfCells();

/**

* 通常第一行都是标题,所以从第二行开始读取数据.这要根据实际情况自行定义开始索引.

*/

for (int i = 1; i < sheet.getLastRowNum() + 1; i++) {

//准备容器

HashMap stringStringHashMap = new HashMap<>();

//获取这个一页中这个表格的一行数据.

org.apache.poi.ss.usermodel.Row row = sheet.getRow(i);

//如果该行里面存在数据.

if (row != null) {

//遍历这行的所有列,按顺序取值,并存入一个map中,key为列的顺序,value为EXCEL这一列的具体值

for (int j = 0; j < physicalNumberOfCells; j++) {

//指定每行每列的接收类型为String

String key = "" + j;

//获取每一列

org.apache.poi.ss.usermodel.Cell cell = row.getCell(j);

//准备接收列内容的容器.

String value = "";

//由于每一列的值类型都可能不同, 所以要根据不同类型进行转换, 否则取值时候会出现问题.

//如果列内容不为null

if (cell != null) {

//则判断是否为数值-- 数据又分两种: 日期和纯数字.

if (0 == cell.getCellType()) {

// 如果是日期类型.

if (org.apache.poi.hssf.usermodel.HSSFDateUtil.isCellDateFormatted(cell)) {

// 则以日期格式获取列值

Date date = cell.getDateCellValue();

//并指定日期格式,进行格式化

DateFormat formater = new SimpleDateFormat(

"yyyy-MM-dd");

value = formater.format(date);

} else {

//如果不是日期, 则为纯数字. 我在这里直接以String类型接收, 正常来讲是要用纯数字接收的.

cell.setCellType(org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING);

value = cell.getStringCellValue();

}

} else {

//如果不为数值, 既不是日期也不是纯数字, 在这里, 统统设置成以字符串进行接收. 如果想具体区别接收,请自行百度.

cell.setCellType(org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING);

value = cell.getStringCellValue();

}

} else {

//如果列内容为null, 则直接设置内容为 " ";

value = "";

}

//存储map中

if (StringUtils.isEmpty(value)) {

value = "";

}

//将这一列, 以列序号为key, 列内容为值, 存入准备好的map容器中.

stringStringHashMap.put(key, value);

}

//最后, 将这一行作为一个整体对象存进List中.

ListMap.add(stringStringHashMap);

} else {

break;

}

}

//以上, 就得到了上传进来的Excel中的数据.

/**---------------------------华丽的分割线---------------------------------*/

//以下,则可以对该数据进行自己项目的不同操作.

//最后,返回处理成功的标识即可.

return "true";

}

以上, 仅仅只是拿到了上传的Excel, 并将所有内容读取到由多个Map组成的List里面. 至于拿到表格数据后需要做什么具体操作, 直接对这个List里面的数据进行操作即可.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值