java后端导入excel将数据写入数据库

时间:2022-05-24 02:32:14

参考:https://www.cnblogs.com/hanfeihanfei/p/7079210.html

 @RequestMapping("/importExcel.do")
public void import2(String xlsPath) throws IOException, BiffException { // 导入已存在的Excel文件,获得只读的工作薄对象
FileInputStream fis = new FileInputStream(xlsPath);
Workbook wk = Workbook.getWorkbook(fis);
// 获取第一张Sheet表
Sheet sheet = wk.getSheet(0);
// 获取总行数
int rowNum = sheet.getRows();
System.out.println("插入总行数:"+rowNum);
// 从数据行开始迭代每一行
for (int i = 0; i < rowNum; i++) {
//先判断插入的数据是否和数据库的数据重复
if(userService.findUser(sheet.getCell(0, i).getContents())>0) {
continue;
}
User u = new User();
// getCell(column,row),表示取得指定列指定行的单元格(Cell)
// getContents()获取单元格的内容,返回字符串数据。适用于字符型数据的单元格
// 使用实体类封装单元格数据
u.setName(sheet.getCell(0, i).getContents());
u.setAge(sheet.getCell(1, i).getContents());
u.setNickName(sheet.getCell(2, i).getContents());
userService.saveUser(u);
System.out.println("成功插入:"+sheet.getCell(0, i).getContents()); /*// 判断单元格的类型,单元格主要类型LABEL、NUMBER、DATE
if (sheet.getCell(2, i).getType == CellType.NUMBER) { // 转化为数值型单元格
NumberCell numCell = (NumberCell) sheet.getCell(2, i);
// NumberCell的getValue()方法取得单元格的数值型数据
info.setRscore(numCell.getValue()); }
if (sheet.getCell(3, i).getType == CellType.NUMBER) {
NumberCell numCell = (NumberCell) sheet.getCell(3, i);
info.setRscore(numCell.getValue);
} if (sheet.getCell(4, i).getType == CellType.DATE) {
DateCell dateCell = (DateCell) sheet.getCell(4, i);
// DateCell的getDate()方法取得单元格的日期型数据
info.setDate(dateCell.getDate());
}*/
}
fis.close();
wk.close();
}

注解都比较详细了

前端代码(ie8和chrome前端获取的路径会出问题)

<form>
<input type="file" id="fileName" name="xlsPath" /> <input
type="button" id="btn" value="提交">
</form>
 $("#btn").click(function() {
var xlsPath = document.getElementById("fileName").value;
/* var path=getPath(xlsPath);
alert(path); */
$.ajax({
"url" : "${pageContext.request.contextPath}/importExcel.do",
"type" : "GET",
"data" : "xlsPath=" + xlsPath,
"dataType" : "json",
"success" : function(res) {
if (res.state == 1) {
alert(message);
} else {
alert(message);
}
}
});
});

可以直接用