poi导入导出表格

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24615069/article/details/82019631

目录

 

1.导入依赖

2.创建工具类

3.Excel读取工具类

4.导入操作


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文件必传");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_24615069/article/details/82019631