导入excel数据到数据库

 

controller:

	/**
	 * 上传Excel逾期催收数据
	 * 
	 * @param request
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/uploadExcelCom")
	public Result uploadExcelCom(HttpServletRequest request) throws Exception {
		Map<String, Object> paramMap = getParamMap(request);
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

		MultipartFile fileData = (MultipartFile) multipartRequest.getFileMap().values().toArray()[0];
		InputStream iStream = fileData.getInputStream();

		discountDetailService.uploadExcelCom(iStream, paramMap);

		return Result.getSuccessResult();
	}

service:

/**
	 * 按格式导入文件
	 * 
	 * @param file
	 * @param paramMap
	 * @throws Exception
	 */
	public void uploadExcelCom(InputStream file, Map<String, Object> paramMap) throws Exception {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();  
		byte[] buffer = new byte[1024];  
		int len1;  
		while ((len1 = file.read(buffer)) > -1 ) {  
		    baos.write(buffer, 0, len1);  
		}  
		baos.flush();
		file.close();
		
		InputStream inputStream1 = new ByteArrayInputStream(baos.toByteArray());
		List<List<Cell[]>> allSheetList = ExcelUtils.getExcleAllSheet(inputStream1); 
		inputStream1.close();
		//创建表头  表头是唯一的
		ReportFormHead reportFormHead = new ReportFormHead();
		String rfhUid = UUID.randomUUID().toString().replaceAll("-", "");
		reportFormHead.setRfhUid(rfhUid);
		reportFormHead.setBeginDate(String.valueOf(paramMap.get("beginDate")));
		reportFormHead.setEndDate(String.valueOf(paramMap.get("endDate")));
		reportFormHead.setBankBranchId(String.valueOf(paramMap.get("bankBranchId")));
		reportFormHead.setBankBranchName(String.valueOf(paramMap.get("bankBranchName")));
		reportFormHead.setBankId(String.valueOf(paramMap.get("bankId")));
		reportFormHead.setBankName(String.valueOf(paramMap.get("bankName")));
		reportFormHead.setCompanyId(String.valueOf(paramMap.get("companyId")));
		reportFormHead.setOpPersonCode(String.valueOf(paramMap.get("opPersonCode")));
		reportFormHead.setOpPersonName(String.valueOf(paramMap.get("opPersonName")));
		reportFormHead.setStatus(String.valueOf(paramMap.get("status")));
		reportFormHead.setTypeId(String.valueOf(paramMap.get("typeId")));
		
		List<ComDiscountDetail> comDiscountDetails = new ArrayList<>();
		for(int i=0; i<allSheetList.size(); i++) {//循环sheet集合
			
		    List<Cell[]> sheet = allSheetList.get(i);
		    for(int j=0 ; j <sheet.size();j++) {
		    	String uuid = UUID.randomUUID().toString().replaceAll("-", "");
		    	ComDiscountDetail comDiscountDetail = new ComDiscountDetail();//创建表体
			    comDiscountDetail.setRfhUid(rfhUid);
			    comDiscountDetail.setComDiscountDetailUuid(uuid);
			    comDiscountDetail.setComDiscountDetailFlag(String.valueOf(paramMap.get("comDiscountDetailFlag")));
			    comDiscountDetail.setStatisticsDateS(String.valueOf(paramMap.get("beginDate")));
			    comDiscountDetail.setStatisticsDateE(String.valueOf(paramMap.get("endDate")));
				Cell[] cells = sheet.get(j);
				if(j==1) {
					//获取标题
					continue;
				}
				if(j==sheet.size()-10) {
					for(int k=0;k<cells.length ; k++) {//列数据
						String value = cells[k].getContents();
						value = value.replace(String.valueOf((char)160)," ");//将ascii码为160转化为ascii码为32的空格
						value = value.trim();//去掉前后空格,trim()只能清除ascii码为32的空格
						//获取填表人  审核人  部门负责人
						value = value==""?"":value.split(":")[1];
						switch (k) {
						case 0:
					    	reportFormHead.setFillerPersonName(value);
						    break;
						case 4:
							reportFormHead.setExamPersonName(value);
							break;
						case 14:
							reportFormHead.setHeadPersonName(value);
							break;
						}
					}
				}
				
				if(j>=6 && j<sheet.size()-11) {//行数据
					for(int k=0;k<cells.length ; k++) {//列数据
						String value = cells[k].getContents();
						value = value.replace(String.valueOf((char)160)," ");//将ascii码为160转化为ascii码为32的空格
						value = value.trim();//去掉前后空格,trim()只能清除ascii码为32的空格
						//如果是时间格式的
						Cell cell =cells[k];
						if(cell.getType() == CellType.DATE){
							DateCell dc = (DateCell)cell;
							Date date = dc.getDate();
							SimpleDateFormat ds = new SimpleDateFormat("yyyy-MM-dd HH:ss:mm");
							value = ds.format(date);
						}
						//表体数据
						switch (k) {
						 case 0:
							    comDiscountDetail.setComDiscountDetailA(value);
							    break;
							case 1:
								comDiscountDetail.setComDiscountDetailB(value);
								break;
							case 2:
								comDiscountDetail.setComDiscountDetailD(value);
								break;
							case 3:
								comDiscountDetail.setComDiscountDetailE(value);
								break;
							case 4:
								comDiscountDetail.setComDiscountDetailF(value);
								break;
							case 5:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailG(value);
								break;
							case 6:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailH(value);
								break;
							case 7:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailI(value);
								break;	
							case 8:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailJ(value);
							    break;
							case 9:
								comDiscountDetail.setComDiscountDetailK(value);
								break;
							case 10:
								comDiscountDetail.setComDiscountDetailL(value);
								break;
							case 11:
								comDiscountDetail.setComDiscountDetailM(value);
								break;
							case 12:
								comDiscountDetail.setComDiscountDetailN(value);
								break;
							case 13:
								comDiscountDetail.setComDiscountDetailO(value);
								break;
							case 14:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailP(value);
								break;
							case 15:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailQ(value);
								break;
							case 16:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailR(value);
								break;
							case 17:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailS(value);
								break;
							case 18:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailT(value);
								break;
							case 19:
								value = value.replaceAll(",","");
								comDiscountDetail.setComDiscountDetailU(value);
								break;
						}
					}
					comDiscountDetails.add(comDiscountDetail);//加入集合
				}
			}
		  
		}
		System.out.println(comDiscountDetails);
		//插入数据库
		discountDetailDao.addReportFormHead(reportFormHead);
		discountDetailDao.addComDiscountDetail(comDiscountDetails);
		
	}

ExcelUtils: 

package com.hsit.utils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.TemplateExportParams;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.springframework.util.ResourceUtils;

import jxl.Cell;
import jxl.Sheet;

/**
 * @description Excel操作(导入|导出)
 * @author jiangxy
 * @date 2019年01月03日
 *
 */
public class ExcelUtils {

	/**
	 * excel模板导出
	 * @param request
	 * @param response
	 * @param templateName   exportTemplates这个目录下面的模板名称
	 * @param fileName       最终下载的文件名称
	 * @param map            数据内容
	 * @throws Exception
	 */
	public static void exportExcelByTemplate(HttpServletRequest request,HttpServletResponse response,String templateName,String fileName,Map<String,Object> map) throws Exception{
		if(StringUtils.isBlank(templateName)) {
			throw new Exception("模板文件不能为空!");
		}
		if(templateName.startsWith(File.separator)) {
			throw new Exception("模板文件名称不合法,不能以/或\\开始");
		}
		
		if(!templateName.toLowerCase().endsWith("xls")
				&&!templateName.toLowerCase().endsWith("xlsx")) {
			throw new Exception("模板文件名称只能为xls或者xlsx格式!");
		}
		
		String[] arrNames = templateName.split("\\.");
		if(arrNames.length!=2) {
			throw new Exception("模板文件名称不合法!");
		}
		File cfgFile = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "exportTemplates/"+templateName);
		TemplateExportParams params = new TemplateExportParams();
		params.setTemplateUrl(cfgFile.getAbsolutePath());//本机路径
		Workbook book = ExcelExportUtil.exportExcel(params, map);
		downloadXls(request,response,book,fileName+"."+arrNames[1]);
	}
	
	public static void downloadXls(HttpServletRequest request,HttpServletResponse response,Workbook book,String fileName) throws Exception {
		String browser = request.getHeader("User-Agent");
        if (-1 < browser.indexOf("MSIE 6.0") || -1 < browser.indexOf("MSIE 7.0")) {
            // IE6, IE7 浏览器
            response.addHeader("content-disposition", "attachment;filename="
                    + new String(fileName.getBytes(), "ISO8859-1"));
        } else if (-1 < browser.indexOf("MSIE 8.0")) {
            // IE8 
            response.addHeader("content-disposition", "attachment;filename="
                    + URLEncoder.encode(fileName, "UTF-8"));
        } else if (-1 < browser.indexOf("MSIE 9.0")) {
            // IE9
            response.addHeader("content-disposition", "attachment;filename="
                    + URLEncoder.encode(fileName, "UTF-8"));
        } else if (-1 < browser.indexOf("Chrome")) {
            // 谷歌
            response.addHeader("content-disposition",
                    "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));
        } else if (-1 < browser.indexOf("Safari")) {
            // 苹果
            response.addHeader("content-disposition", "attachment;filename="
                    + new String(fileName.getBytes(), "ISO8859-1"));
        } else {
            // 火狐或者其他的浏览器
            response.addHeader("content-disposition",
                    "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName, "UTF-8"));
        }
        response.setHeader("content-Type", "application/vnd.ms-excel");
		response.setCharacterEncoding("UTF-8");
		OutputStream out = response.getOutputStream();
		book.write(out);
		out.close();
	}
	
	/**
	 * 非模板导出
	 * @param fileName 下载时的文件名
	 * @param title    导出的xls的标题
	 * @param sheetName sheet的名称
	 * @param names    表头的中文名称
	 * @param rows     对应要显示的字段
	 * @param lens     对应的宽度
	 * @param list     显示的数据集
	 * @param response
	 * @throws Exception
	 */
	public static void excelXls(String fileName,String title,String sheetName,String[] names,String[] rows,int[] lens,List<Map<String,Object>> list,HttpServletResponse response) throws Exception {
        response.setHeader("content-Type", "application/vnd.ms-excel");
		response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8") + ".xls");
		response.setCharacterEncoding("UTF-8");
		List<ExcelExportEntity> entity = ExcelUtils.getEntity(names,rows,lens);
		ExportParams params = new ExportParams(title,sheetName);
		HSSFWorkbook book = (HSSFWorkbook) ExcelExportUtil.exportExcel(params,entity,list);
		OutputStream out = response.getOutputStream();
		book.write(out);
		out.close();
	}

	public static List<ExcelExportEntity> getEntity(String[] names, String[] rows, int[] lens) throws Exception {
		List<ExcelExportEntity> entity = new ArrayList<>();
		if(names==null||rows==null||names.length<=0||rows.length<=0) {
			throw new Exception("传入的表头名称和字段名称不能为空");
		}
		if(names.length!=rows.length) {
			throw new Exception("传入的表头与字段名称不匹配");
		}
		for(int i=0;i<names.length;i++) {
			ExcelExportEntity e = new ExcelExportEntity(names[i], rows[i], lens[i]);
			e.setFormat("");
			entity.add(e);
		}
		return entity;
	}
	
	/**
     * 多表头导出Excel
     * @param fileName 文件名
     * @param sheetName sheet名称
     * @param titleName 标题
     * @param list 内容
     * @param headnum 合并标题
     * @param rows 字段
     * @param colums 内容需要合并的列   0正常不合并
	 * @throws IOException 
     */
    public static void getHSSFWorkbook(String fileName,String firstTitle,String sheetName,int[] lens,List<String[]> titleName,String[] headnum,List<Map<String,Object>> list,String[] rows,int colums,HttpServletResponse response) throws IOException{
    	
    	String[][] values =new String[list.size()][titleName.get(0).length];
		for (int i = 0; i < list.size(); i++) {
           Map<String,Object> obj = list.get(i);
           for (int j = 0; j < rows.length; j++) {
        	   values[i][j] = String.valueOf(obj.get(rows[j])==null?"":obj.get(rows[j]));
           }
         }
    	int biaoti = 2 ; //标题占据几行
    	//第一步 创建工作workbook
    	HSSFWorkbook   wb = new HSSFWorkbook();

        //第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);
        
        //第三步    标题
        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, titleName.get(0).length-1));
        //标题的格式
        HSSFCellStyle style2 = wb.createCellStyle();
        //水平居中
        style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //垂直居中
        style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 生成一个字体	
     	HSSFFont font = wb.createFont();
     	font.setColor(IndexedColors.BLACK.getIndex());
		font.setFontName("宋体"); //设置字体
		font.setFontHeightInPoints((short) 16); //设置字号
		font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //设置字体样式 正常显示
		// 把字体应用到当前的样式
		style2.setFont(font);
		//声明列对象
		HSSFRow row = sheet.createRow(0);
		HSSFCell cell = row.createCell(0);
        cell.setCellValue(firstTitle);
        cell.setCellStyle(style2);
        
        // 添加表头合并单元格动态合并单元格
        for (int i = 0; i < headnum.length; i++) {
            String[] temp = headnum[i].split(",");
            Integer startrow = Integer.parseInt(temp[0]);
            Integer overrow = Integer.parseInt(temp[1]);
            Integer startcol = Integer.parseInt(temp[2]);
            Integer overcol = Integer.parseInt(temp[3]);
            sheet.addMergedRegion(new CellRangeAddress(startrow+biaoti, overrow+biaoti, startcol, overcol));
        }
     // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        //水平居中
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //垂直居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
      
       // 第五部创建表头
        for(int i=0;i<titleName.size();i++){
        	row = sheet.createRow(i+biaoti);
        	String[] title = titleName.get(i);
        	for(int j=0;j<title.length;j++){
        		if(i > 0) {
        			//判断是否有合并行
        			String[] preTitle = titleName.get(i-1);
    				if(!preTitle[j].equals(title[j])) {
    					cell = row.createCell(j);
    	                cell.setCellValue(title[j]);
    	                cell.setCellStyle(style);
    				}
        		}else {
        			if(j>0) {
            			if(!title[j].equals(title[j-1])) {
            				//判断是否是合并列
                			cell = row.createCell(j);
        	                cell.setCellValue(title[j]);
        	                cell.setCellStyle(style);
            			}
            		}else {
            			cell = row.createCell(j);
    	                cell.setCellValue(title[j]);
    	                cell.setCellStyle(style);
            		}
        		}
        		
			}
        }
        
        if(colums>0) {
        	//数据内容的合并
            int changeC = titleName.size()+biaoti;
            for(int i=0;i<values.length;i++){
                for(int j=0;j<values[i].length;j++){
                    //将内容按顺序赋给对应的列对象
                	if(i!=0&& j==(colums-1)) {
                		if(!values[i][j].equals(values[i-1][j])) {
                			sheet.addMergedRegion(new CellRangeAddress(changeC, titleName.size()+i+biaoti-1, j, j));
                			changeC=titleName.size()+i+biaoti;
                		}else {
                			if(i==values.length-1) {
                				sheet.addMergedRegion(new CellRangeAddress(changeC, titleName.size()+i+biaoti, j, j));
                			}
                		}
                		
                	}
                }
            }
            //创建内容
            for(int i=0;i<values.length;i++){
                row = sheet.createRow(i + titleName.size()+biaoti);
                for(int j=0;j<values[i].length;j++){
                    //将内容按顺序赋给对应的列对象
                	String value =values[i][j];
                	if(i!=0&& j==(colums-1)) {
                		if(!values[i][j].equals(values[i-1][j])) {
                			cell = row.createCell(j);
                			cell.setCellValue(value);
                			cell.setCellStyle(style);
                		}
                	}else {
                		cell = row.createCell(j);
            			cell.setCellValue(value);
            			cell.setCellStyle(style);
                	}
                	//sheet.autoSizeColumn(j, true);
                }
            }
        }else {
        	//创建内容
            for(int i=0;i<values.length;i++){
                row = sheet.createRow(i + titleName.size()+biaoti);
                for(int j=0;j<values[i].length;j++){
                    //将内容按顺序赋给对应的列对象
                	String value =values[i][j];
        			cell = row.createCell(j);
        			cell.setCellValue(value);
        			cell.setCellStyle(style);
                }
            }
        }
        
        //设置行宽度
        for(int i=0;i<lens.length;i++){
        	sheet.setColumnWidth(i, 256*lens[i]); //设置某一列宽度
        }
        
        try {
            try {
            	System.out.println(fileName);
                fileName = new String(fileName.getBytes(),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            response.setHeader("content-Type", "application/vnd.ms-excel");
    		response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8") + ".xls");
    		response.setCharacterEncoding("UTF-8");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
        OutputStream os = response.getOutputStream();
	     wb.write(os);
	     os.flush();
	     os.close();
    }
    
    /**
     * 获取Excel单个sheet页所有单元格数据集
     * @param excelFile
     * @return
     * @throws Exception
     */
    public static List<Cell[]> getExcle(InputStream excelFile) throws Exception {
		jxl.Workbook workbook = null;
		int count=0;
		List<Cell[]> list=new ArrayList<Cell[]>();
		try {
			workbook = jxl.Workbook.getWorkbook(excelFile);
			Sheet sheet = workbook.getSheet(0);
			count = sheet.getRows();
			for(int i=0;i<count;i++){
				Cell[] row = sheet.getRow(i);
				list.add(row);
			}
		} catch (Exception e) {
			e.getLocalizedMessage();
		} finally {
			if (workbook != null) {
				workbook.close();
			}
		}
		return list;
	}
    
    /**
     * 获取Excel多个sheet页所有单元格数据集
     * @param excelFile
     * @return
     * @throws Exception
     */
    public static List<List<Cell[]>> getExcleAllSheet(InputStream excelFile) throws Exception {
		jxl.Workbook workbook = null;
		int count=0;
		List<List<Cell[]>> allSheetList = new ArrayList<List<Cell[]>>();
		try {
			workbook = jxl.Workbook.getWorkbook(excelFile);
			int sheetNum = workbook.getNumberOfSheets();
			for (int i = 0; i < sheetNum; i++) {
				List<Cell[]> list=new ArrayList<Cell[]>();
				Sheet sheet = workbook.getSheet(i);
				count = sheet.getRows();
				for(int j=0;j<count;j++){
					Cell[] row = sheet.getRow(j);
					list.add(row);
				}
				allSheetList.add(list);
			}
			
		} catch (Exception e) {
			e.getLocalizedMessage();
		} finally {
			if (workbook != null) {
				workbook.close();
			}
		}
		return allSheetList;
	}
}

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值