前言:太特么难了,网上一堆大坑写的半拉柯基的,我是东拼西凑,连蒙带骗,可算是整出来了。佰度得内容都是大坑啊,有一个人写得又test8又test19的,也不写是啥玩意。为了避免这个文章被驳回,我忍住了一万句骂人的话语。看他们写那玩意憋一肚子气啊。
、、先整个按钮,随便在哪,是个按钮就行。给按钮加个id = uploadPgb
<button class="layui-btn layui-btn-radius" id="uploadPgb">数据导入</button>
下边就是重要的代码了,我知道的基本都写了。有懂得留言吧
//找到你的layui.use 里边加个upload
layui.use(['table', 'layer', 'laydate','upload', 'jquery'], function () {
//...不管其他代码
//下边随便找个空位置
$("#uploadPgb").click(function () {
//获取下边需要使用的对象
var $ = layui.jquery
,upload = layui.upload;
var default_config = {
msg:"数据导入成功!"
}
// $.extend( default_config, config);
var idRandom = "importData" + Math.ceil(Math.random()*10000) //模板的div的随机数id
//创建模板(下边有个小四方框里边有个问好,不知道是啥,反正不影响,也没动他)
var htmlContent = '<div class="layui-upload-drag" id="'+idRandom+'">';
htmlContent += '<i class="layui-icon"></i>';
htmlContent += '<p>点击选择文件,或将文件拖拽到此处</p>';
htmlContent += '</div>';
htmlContent += '<div style="text-align: center">';
htmlContent += '<button id="test19" class="layui-btn">点击上传</button>';
htmlContent += '</div>';
layer.open({
type: 1
,offset: "auto" //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
,id: 'layer_importData' //防止重复弹出
,title:'导入'
, headers: {"authorization": token}
,content: htmlContent //需要打开的模板
,maxWidth:800
// ,btn: ['下载模板'] //这里可以加一个下载模板的按钮,我不需要,注释了。
,btnAlign: 'c' //按钮居中
,shade: 0 //不显示遮罩
,yes: function(){//下载模板按钮提交
// var iframe = $("<iframe></iframe>");
// iframe.attr("src",default_config.downUrl);
// iframe.css("display","none");
// $("#"+idRandom).append(iframe);
}
});
form.render();//这个不知道嘎哈的,复制来的,也没实验去掉行不行。你们谁实验了请告诉我结果
//拖拽上传 注意这里这个upload要在上边layui.use中定义
upload.render({
elem: "#"+idRandom //绑定上边定义的小弹窗
,url: "../busineAssessment/uploadExcel"
,accept: 'file' //普通文件
, headers: {"authorization": token} //我用的token,如果不是token验证的项目不用加这个
,auto: false //关闭自动上传(这个如果不写,文件拽进来直接走接口,不需要点按钮,想点按钮就写个这个拒绝自动上传)
,bindAction: '#test19' //上边选择拒绝自动上传了这个里就自己加个按钮,点击自动调用url接口
,done: function(data){ //调用结束返回的data
if(data.code == 0){
layer.closeAll();//执行成功关闭弹窗
//
layer.msg(data.msg);
}else{
layer.msg(data.msg);
}
}
});
return false;
});
}
//下边是后台代码
//控制层,没啥用,就是接到这个file然后仍到service中
@ApiOperation(value = "execl数据持久化")
@PostMapping("busineAssessment/uploadExcel")
@ResponseBody
public String uploadExcel(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
System.out.println("进来了");
Map<String, Object> map = new HashMap<String, Object>();
String resouce = busineAssessmentService.uploadExcel(file, request, response);
return resouce;
}
//service逻辑层
@Override
public String uploadExcel(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
if(file.isEmpty()){
try {
throw new Exception("文件不存在!");
} catch (Exception e) {
e.printStackTrace();
}
}
InputStream in =null;
try {
in = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
List<List<Object>> listob = null;
try {
listob = new ExcelUtils().getBankListByExcel(in,file.getOriginalFilename());
} catch (Exception e) {
e.printStackTrace();
}
//该处可调用service相应方法进行数据保存到数据库中,现只对数据输出
for (int i = 0; i < listob.size(); i++) {
System.out.println(listob.get(i));
}
return "success";
}
ExcelUtils
package com.company.project.common.utils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Constant
*
* @author wenbin
* @version V1.0
* @date 2020年3月18日
*/
public class ExcelUtils {
private final static String excel2003L =".xls"; //2003- 版本的excel
private final static String excel2007U =".xlsx"; //2007+ 版本的excel
/**
* 描述:获取IO流中的数据,组装成List<List<Object>>对象
* @param in,fileName
* @return
* @throws
*/
public List<List<Object>> getBankListByExcel(InputStream in, String fileName) throws Exception {
List<List<Object>> list = null;
//创建Excel工作薄
Workbook work = this.getWorkbook(in, fileName);
if (null == work) {
throw new Exception("创建Excel工作薄为空!");
}
Sheet sheet = null; //页数
Row row = null; //行数
Cell cell = null; //列数
list = new ArrayList<List<Object>>();
//遍历Excel中所有的sheet
for (int i = 0; i < work.getNumberOfSheets(); i++) {
sheet = work.getSheetAt(i);
if (sheet == null) {
continue;
}
//遍历当前sheet中的所有行
for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
row = sheet.getRow(j);
if (row == null || row.getFirstCellNum() == j) {
continue;
}
//遍历所有的列
List<Object> li = new ArrayList<Object>();
for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
cell = row.getCell(y);
li.add(this.getValue(cell));
}
list.add(li);
}
}
return list;
}
/**
* 描述:根据文件后缀,自适应上传文件的版本
* @param inStr,fileName
* @return
* @throws Exception
*/
public Workbook getWorkbook(InputStream inStr,String fileName) throws Exception{
Workbook wb = null;
String fileType = fileName.substring(fileName.lastIndexOf("."));
if(excel2003L.equals(fileType)){
wb = new HSSFWorkbook(inStr); //2003-
}else if(excel2007U.equals(fileType)){
wb = new XSSFWorkbook(inStr); //2007+
}else{
throw new Exception("解析的文件格式有误!");
}
return wb;
}
/**
* 描述:对表格中数值进行格式化
* @param cell
* @return
*/
//解决excel类型问题,获得数值
public String getValue(Cell cell) {
String value = "";
if(null==cell){
return value;
}
switch (cell.getCellType()) {
//数值型
case Cell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
//如果是date类型则 ,获取该cell的date值
Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
value = format.format(date);;
}else {// 纯数字
BigDecimal big=new BigDecimal(cell.getNumericCellValue());
value = big.toString();
//解决1234.0 去掉后面的.0
if(null!=value&&!"".equals(value.trim())){
String[] item = value.split("[.]");
if(1<item.length&&"0".equals(item[1])){
value=item[0];
}
}
}
break;
//字符串类型
case Cell.CELL_TYPE_STRING:
value = cell.getStringCellValue().toString();
break;
// 公式类型
case Cell.CELL_TYPE_FORMULA:
//读公式计算值
value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
break;
// 布尔类型
case Cell.CELL_TYPE_BOOLEAN:
value = " "+ cell.getBooleanCellValue();
break;
default:
value = cell.getStringCellValue().toString();
}
if("null".endsWith(value.trim())){
value="";
}
return value;
}
}
//需要的依赖
<!-- 读取excel -->
<!--文件上传组件-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!--读取excel文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
结束语:太特么难了,干的这憋气