版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24615069/article/details/82019631
目录
1.导入依赖
导入poi相关的,导入上传文件需要的springframework
<!-- poi操作excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.8</version>
</dependency>
<!-- Spring 只导入了上传文件需要的webmvc以及关联的几个依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
2.创建工具类
导出工具类,导出使用方法在main方法里
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.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;
/**
* excel导出的封装类
* @author luowudi
*
*/
public class ExcelExportSXXSSF {
// 定义工作表
private SXSSFWorkbook wb;
/**
* 定义工作表中的sheet
*/
private Sheet sh;
/**
* 定义保存在内存中的数量,-1表示手动控制
*/
private int flushRows;
/** 导出文件行数 */
private int rownum;
/** 导出文件列数 */
private int colnum;
/** 导出文件的存放路径 */
private String filePath;
/** 下载导出文件的路径 */
private String fileWebPath;
/**文件名称前缀*/
private String filePrefix;
/**导出文件全路径*/
private String fileAllPath;
/** 导出文件列标题 */
private List<String> fieldNames;
/**导出文件每列代码,用于反射获取对象属性值*/
private List<String> fieldCodes;
private ExcelExportSXXSSF() {
}
/**
* 开始导出方法
*
* @param filePath
* 导出文件存放物理路径
* @param fileWebPath
* 导出文件web下载路径
* @param filePrefix
* 导出文件名的前缀
* @param flushRows
* 存放在内存的数据量
* @param fieldNames
* 导出文件列标题
* @param fieldCodes
* 导出数据对象的字段名称
* @param flushRows
* 写磁盘控制参数
* @return
*/
public static ExcelExportSXXSSF start(String filePath, String fileWebPath,String filePrefix,
List<String> fieldNames,List<String> fieldCodes, int flushRows) throws Exception {
ExcelExportSXXSSF excelExportSXXSSF = new ExcelExportSXXSSF();
excelExportSXXSSF.setFilePath(filePath);
excelExportSXXSSF.setFileWebPath(fileWebPath);
excelExportSXXSSF.setFilePrefix(filePrefix);
excelExportSXXSSF.setFieldNames(fieldNames);
excelExportSXXSSF.setFieldCodes(fieldCodes);
excelExportSXXSSF.setWb(new SXSSFWorkbook(flushRows));//创建workbook
excelExportSXXSSF.setSh(excelExportSXXSSF.getWb().createSheet());//创建sheet
excelExportSXXSSF.writeTitles();
return excelExportSXXSSF;
}
/**
* 设置导入文件的标题
* 开始生成导出excel的标题
* @throws Exception
*/
private void writeTitles() throws Exception {
rownum = 0;//第0行
colnum = fieldNames.size();//根据列标题得出列数
Row row = sh.createRow(rownum);
for (int cellnum = 0; cellnum < colnum; cellnum++) {
Cell cell = row.createCell(cellnum);
cell.setCellValue(fieldNames.get(cellnum));
}
}
/**
* 向导出文件写数据
*
* @param datalist
* 存放Object对象,仅支持单个自定义对象,不支持对象中嵌套自定义对象
* @return
*/
public void writeDatasByObject(List datalist) throws Exception {
for (int j = 0; j < datalist.size(); j++) {
rownum = rownum + 1;
Row row = sh.createRow(rownum);
for (int cellnum = 0; cellnum < fieldCodes.size(); cellnum++) {
String fieldCode = fieldCodes.get(cellnum);
Object owner = null;
Object value = null;
if(fieldCode.indexOf(".")<0){
owner = datalist.get(j);
value = invokeMethod(owner, fieldCodes.get(cellnum),
new Object[] {});
}else{
owner = datalist.get(j);
String[] fieldCodeArray = fieldCode.split("\\.");
for(int i=0;i<fieldCodeArray.length-1;i++){
if(owner!=null){
owner = invokeMethod(owner, fieldCodeArray[i],
new Object[] {});
}
}
if(owner!=null){
value = invokeMethod(owner, fieldCodeArray[fieldCodeArray.length-1],
new Object[] {});
}else{
value = null;
}
}
Cell cell = row.createCell(cellnum);
cell.setCellValue(value!=null?value.toString():"");
}
}
}
/**
* 向导出文件写数据
*
* @param datalist
* 存放字符串数组
* @return
*/
public void writeDatasByString(List<String> datalist) throws Exception {
rownum = rownum + 1;
Row row = sh.createRow(rownum);
int datalist_size = datalist.size();
for (int cellnum = 0; cellnum < colnum; cellnum++) {
Cell cell = row.createCell(cellnum);
if(datalist_size>cellnum){
cell.setCellValue(datalist.get(cellnum));
}else{
cell.setCellValue("");
}
}
}
/**
* 手动刷新方法,如果flushRows为-1则需要使用此方法手动刷新内存
*
* @param flushNum
* @throws Exception
*/
public void flush(int flushNum) throws Exception {
((SXSSFSheet) sh).flushRows(flushNum);
}
/**
* 导出文件
*
* @throws Exception
*/
public String exportFile() throws Exception {
String filename = filePrefix+"_"+new Date().getTime() + ".xlsx";
FileOutputStream out = new FileOutputStream(filePath + filename);
wb.write(out);
out.flush();
out.close();
setFileAllPath(fileWebPath + filename);
return fileWebPath + filename;
}
/**
* 反射方法,通过get方法获取对象属性
*
* @param owner
* @param fieldname
* @param args
* @return
* @throws Exception
*/
private Object invokeMethod(Object owner, String fieldname, Object[] args)
throws Exception {
String methodName = "get" + fieldname.substring(0, 1).toUpperCase()
+ fieldname.substring(1);
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = null;
try {
method = ownerClass.getMethod(methodName, argsClass);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(method!=null){
return method.invoke(owner, args);
}else{
return null;
}
}
//getter setter....
public static void main(String[] args) throws Exception {
/** 导出文件存放物理路径
* @param fileWebPath
* 导出文件web下载路径
* @param filePrefix
* 导出文件名的前缀
* @param flushRows
* 存放在内存的数据量
* @param fieldNames
* 导出文件列标题
* @param fieldCodes
* 导出数据对象的字段名称
* @param flushRows*/
//导出文件存放的路径,并且是虚拟目录指向的路径,在web服务器
// String filePath = "f:/develop/upload/temp/";
// //导出文件的前缀
// String filePrefix="ypxx";
// //-1表示关闭自动刷新,手动控制写磁盘的时机,其它数据表示多少数据在内存保存,超过的则写入磁盘
// int flushRows=100;
//
// //指导导出数据的title
// List<String> fieldNames=new ArrayList<String>();
// fieldNames.add("流水号");
// fieldNames.add("通用名");
// fieldNames.add("价格");
// fieldNames.add("测试");
//
// //告诉导出类数据list中对象的属性,让ExcelExportSXXSSF通过反射获取对象的值
// List<String> fieldCodes=new ArrayList<String>();
// fieldCodes.add("bm");//药品流水号
// fieldCodes.add("mc");//通用名
// fieldCodes.add("price");//价格
// fieldCodes.add("ypxxTest.b.c");
//
// //准备导出的数据,将数据存入list,且list中对象的字段名称必须是刚才传入ExcelExportSXXSSF的名称
// List<YpxxTest> list = new ArrayList<YpxxTest>();
//
// YpxxTest ypxx1 = new YpxxTest("001", "青霉素", 5);
// YpxxTest ypxx2 = new YpxxTest("002", "感冒胶囊", 2.5f);
// list.add(ypxx1);
// list.add(ypxx2);
//
// //注意:fieldCodes和fieldNames个数必须相同且属性和title顺序一一对应,这样title和内容才一一对应
//
//
// //开始导出,执行一些workbook及sheet等对象的初始创建
// ExcelExportSXXSSF excelExportSXXSSF = ExcelExportSXXSSF.start(filePath, "/upload/", filePrefix, fieldNames, fieldCodes, flushRows);
//
//
// //执行导出
// excelExportSXXSSF.writeDatasByObject(list);
// //输出文件,返回下载文件的http地址
// String webpath = excelExportSXXSSF.exportFile();
//
// System.out.println(webpath);
}
}
3.Excel读取工具类
package com.fushoukeji.pobc.common.util;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
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;
/**
*
* excel读取工具类
*
* @author daochuwenziyao
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class ImportExeclUtil
{
private static int totalRows = 0;// 总行数
private static int totalCells = 0;// 总列数
private static String errorInfo;// 错误信息
/** 无参构造方法 */
public ImportExeclUtil()
{
}
public static int getTotalRows()
{
return totalRows;
}
public static int getTotalCells()
{
return totalCells;
}
public static String getErrorInfo()
{
return errorInfo;
}
/**
*
* 根据流读取Excel文件
*
*
* @param inputStream
* @param isExcel2003
* @return
* @see [类、类#方法、类#成员]
*/
public List<List<String>> read(InputStream inputStream, boolean isExcel2003)
throws IOException
{
List<List<String>> dataLst = null;
/** 根据版本选择创建Workbook的方式 */
Workbook wb = null;
if (isExcel2003)
{
wb = new HSSFWorkbook(inputStream);
}
else
{
wb = new XSSFWorkbook(inputStream);
}
dataLst = readDate(wb);
return dataLst;
}
/**
*
* 读取数据
*
* @param wb
* @return
* @see [类、类#方法、类#成员]
*/
private List<List<String>> readDate(Workbook wb)
{
List<List<String>> dataLst = new ArrayList<List<String>>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
/** 得到Excel的行数 */
totalRows = sheet.getPhysicalNumberOfRows();
/** 得到Excel的列数 */
if (totalRows >= 1 && sheet.getRow(0) != null)
{
totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
/** 循环Excel的行 */
for (int r = 0; r < totalRows; r++)
{
Row row = sheet.getRow(r);
if (row == null)
{
continue;
}
List<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (int c = 0; c < getTotalCells(); c++)
{
Cell cell = row.getCell(c);
String cellValue = "";
if (null != cell)
{
// 以下是判断数据的类型
switch (cell.getCellType())
{
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
cellValue = cell.getNumericCellValue() + "";
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
}
rowLst.add(cellValue);
}
/** 保存第r行的第c列 */
dataLst.add(rowLst);
}
return dataLst;
}
/**
*
* 按指定坐标读取实体数据
* <按顺序放入带有注解的实体成员变量中>
*
* @param wb 工作簿
* @param t 实体
* @param in 输入流
* @param integers 指定需要解析的坐标
* @return T 相应实体
* @throws IOException
* @throws Exception
* @see [类、类#方法、类#成员]
*/
@SuppressWarnings("unused")
public static <T> T readDateT(Workbook wb, T t, InputStream in, Integer[]... integers)
throws IOException, Exception
{
// 获取该工作表中的第一个工作表
Sheet sheet = wb.getSheetAt(0);
// 成员变量的值
Object entityMemberValue = "";
// 所有成员变量
Field[] fields = t.getClass().getDeclaredFields();
// 列开始下标
int startCell = 0;
/** 循环出需要的成员 */
for (int f = 0; f < fields.length; f++)
{
fields[f].setAccessible(true);
String fieldName = fields[f].getName();
boolean fieldHasAnno = fields[f].isAnnotationPresent(IsNeeded.class);
// 有注解
if (fieldHasAnno)
{
IsNeeded annotation = fields[f].getAnnotation(IsNeeded.class);
boolean isNeeded = annotation.isNeeded();
// Excel需要赋值的列
if (isNeeded)
{
// 获取行和列
int x = integers[startCell][0] - 1;
int y = integers[startCell][1] - 1;
Row row = sheet.getRow(x);
Cell cell = row.getCell(y);
if (row == null)
{
continue;
}
// Excel中解析的值
String cellValue = getCellValue(cell);
// 需要赋给成员变量的值
entityMemberValue = getEntityMemberValue(entityMemberValue, fields, f, cellValue);
// 赋值
PropertyUtils.setProperty(t, fieldName, entityMemberValue);
// 列的下标加1
startCell++;
}
}
}
return t;
}
/**
*
* 读取列表数据
* <按顺序放入带有注解的实体成员变量中>
*
* @param wb 工作簿
* @param t 实体
* @param beginLine 开始行数
* @param totalcut 结束行数减去相应行数
* @return List<T> 实体列表
* @throws Exception
* @see [类、类#方法、类#成员]
*/
@SuppressWarnings("unchecked")
public static <T> List<T> readDateListT(Workbook wb, T t, int beginLine, int totalcut)
throws Exception
{
List<T> listt = new ArrayList<T>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
/** 得到Excel的行数 */
totalRows = sheet.getPhysicalNumberOfRows();
/** 得到Excel的列数 */
if (totalRows >= 1 && sheet.getRow(0) != null)
{
totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
/** 循环Excel的行 */
for (int r = beginLine - 1; r < totalRows - totalcut; r++)
{
Object newInstance = t.getClass().newInstance();
Row row = sheet.getRow(r);
if (row == null)
{
continue;
}
// 成员变量的值
Object entityMemberValue = "";
// 所有成员变量
Field[] fields = t.getClass().getDeclaredFields();
// 列开始下标
int startCell = 0;
for (int f = 0; f < fields.length; f++)
{
fields[f].setAccessible(true);
String fieldName = fields[f].getName();
boolean fieldHasAnno = fields[f].isAnnotationPresent(IsNeeded.class);
// 有注解
if (fieldHasAnno)
{
IsNeeded annotation = fields[f].getAnnotation(IsNeeded.class);
boolean isNeeded = annotation.isNeeded();
// Excel需要赋值的列
if (isNeeded)
{
Cell cell = row.getCell(startCell);
String cellValue = getCellValue(cell);
entityMemberValue = getEntityMemberValue(entityMemberValue, fields, f, cellValue);
// 赋值
PropertyUtils.setProperty(newInstance, fieldName, entityMemberValue);
// 列的下标加1
startCell++;
}
}
}
listt.add((T)newInstance);
}
return listt;
}
/**
*
* 根据Excel表格中的数据判断类型得到值
*
* @param cell
* @return
* @see [类、类#方法、类#成员]
*/
private static String getCellValue(Cell cell)
{
String cellValue = "";
if (null != cell)
{
// 以下是判断数据的类型
switch (cell.getCellType())
{
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell))
{
Date theDate = cell.getDateCellValue();
SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd");
cellValue = dff.format(theDate);
}
else
{
DecimalFormat df = new DecimalFormat("0");
cellValue = df.format(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
}
return cellValue;
}
/**
*
* 根据实体成员变量的类型得到成员变量的值
*
* @param realValue
* @param fields
* @param f
* @param cellValue
* @return
* @see [类、类#方法、类#成员]
*/
private static Object getEntityMemberValue(Object realValue, Field[] fields, int f, String cellValue)
{
String type = fields[f].getType().getName();
switch (type)
{
case "char":
case "java.lang.Character":
case "java.lang.String":
realValue = cellValue;
break;
case "java.util.Date":
realValue = StringUtils.isBlank(cellValue) ? null : DateUtil.strToDate(cellValue, DateUtil.YYYY_MM_DD);
break;
case "java.lang.Integer":
realValue = StringUtils.isBlank(cellValue) ? null : Integer.valueOf(cellValue);
break;
case "int":
case "float":
case "double":
case "java.lang.Double":
case "java.lang.Float":
case "java.lang.Long":
case "java.lang.Short":
case "java.math.BigDecimal":
realValue = StringUtils.isBlank(cellValue) ? null : new BigDecimal(cellValue);
break;
default:
break;
}
return realValue;
}
/**
*
* 根据路径或文件名选择Excel版本
*
*
* @param filePathOrName
* @param in
* @return
* @throws IOException
* @see [类、类#方法、类#成员]
*/
public static Workbook chooseWorkbook(String filePathOrName, InputStream in)
throws IOException
{
/** 根据版本选择创建Workbook的方式 */
Workbook wb = null;
boolean isExcel2003 = ExcelVersionUtil.isExcel2003(filePathOrName);
if (isExcel2003)
{
wb = new HSSFWorkbook(in);
}
else
{
wb = new XSSFWorkbook(in);
}
return wb;
}
static class ExcelVersionUtil
{
/**
*
* 是否是2003的excel,返回true是2003
*
*
* @param filePath
* @return
* @see [类、类#方法、类#成员]
*/
public static boolean isExcel2003(String filePath)
{
return filePath.matches("^.+\\.(?i)(xls)$");
}
/**
*
* 是否是2007的excel,返回true是2007
*
*
* @param filePath
* @return
* @see [类、类#方法、类#成员]
*/
public static boolean isExcel2007(String filePath)
{
return filePath.matches("^.+\\.(?i)(xlsx)$");
}
}
public static class DateUtil
{
// ======================日期格式化常量=====================//
public static final String YYYY_MM_DDHHMMSS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYYY_MM = "yyyy-MM";
public static final String YYYY = "yyyy";
public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static final String YYYYMMDD = "yyyyMMdd";
public static final String YYYYMM = "yyyyMM";
public static final String YYYYMMDDHHMMSS_1 = "yyyy/MM/dd HH:mm:ss";
public static final String YYYY_MM_DD_1 = "yyyy/MM/dd";
public static final String YYYY_MM_1 = "yyyy/MM";
/**
*
* 自定义取值,Date类型转为String类型
*
* @param date 日期
* @param pattern 格式化常量
* @return
* @see [类、类#方法、类#成员]
*/
public static String dateToStr(Date date, String pattern)
{
SimpleDateFormat format = null;
if (null == date)
return null;
format = new SimpleDateFormat(pattern, Locale.getDefault());
return format.format(date);
}
/**
* 将字符串转换成Date类型的时间
* <hr>
*
* @param s 日期类型的字符串<br>
* datePattern :YYYY_MM_DD<br>
* @return java.util.Date
*/
public static Date strToDate(String s, String pattern)
{
if (s == null)
{
return null;
}
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try
{
date = sdf.parse(s);
}
catch (ParseException e)
{
e.printStackTrace();
}
return date;
}
}
}
4.导入操作
/**
* 简单版,一个controller层写完,方便展示。
*/
@PostMapping(value = "/importList")
public Result<Object> importList(HttpServletRequest request, HttpServletResponse response) {
// 创建一个通用的多部分解析器.
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 设置编码
commonsMultipartResolver.setDefaultEncoding("utf-8");
// 判断 request 是否有文件上传,即多部分请求
if (commonsMultipartResolver.isMultipart(request)) {
try {
// 上传...
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multiRequest.getFile("file");
InputStream fileInputStream = file.getInputStream();
Workbook wb = ImportExeclUtil.chooseWorkbook(file.getName(), fileInputStream);
TOrganisation tOrganisation = new TOrganisation();
List<TOrganisation> organisationList = ImportExeclUtil.readDateListT(wb, tOrganisation, 2, 0);
if (organisationDateList==null) {
throw new PobcException(BizExceptionEnum.NO_DATA);
}
for (TOrganisation organisation : organisationDateList) {
if (organisation==null) {
continue;
}
try {
organisationMapper.insertSelective(organisation);
} catch (Exception e) {
throw new PobcException(BizExceptionEnum.SYSTEM_ERROR);
}
}
return new ResultUtil<Object>().setData(null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.FORMAT_IS_FALSE.getCode(),"格式错误");
} catch (POIXMLException e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.SYSTEM_ERROR.getCode(),"请按照模板上传excel文件");
} catch (IllegalStateException e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.SYSTEM_ERROR.getCode(),"execl上传出错");
} catch (IOException e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.SYSTEM_ERROR.getCode(),"execl上传出错");
} catch (RuntimeException e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.SYSTEM_ERROR.getCode(),"execl上传出错");
} catch (Exception e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.SYSTEM_ERROR.getCode(),"系统错误");
}
} else {
return new ResultUtil<Object>().setErrorMsg(BizExceptionEnum.CAN_NOT_NULL.getCode(),"execl文件必传");
}
}