package com.zt.common.utils; import cn.hutool.core.date.DateUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.metadata.TableStyle; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.List; import static java.lang.Thread.currentThread; import static java.lang.Thread.sleep; /** * excel工具类 * * @author Mark sunlightcs@gmail.com */ public class ExcelUtils { public static void export(HttpServletResponse response, String fileName, List list, Class pojoClass) throws IOException { if (StringUtils.isBlank(fileName)) { // 当前日期 fileName = DateUtil.now(); } else { fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); fileName = fileName + "_" + DateUtil.now(); } response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), pojoClass).sheet("sheet1").doWrite(list); } public static void export(HttpServletResponse response, String fileName, String[] sheets, List[] lists) throws IOException { if (StringUtils.isBlank(fileName)) { // 当前日期 fileName = DateUtil.now(); } else { fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); fileName = fileName + "_" + DateUtil.now(); } response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build(); ; try { for (int i = 0; i < sheets.length; i++) { String sheet = sheets[i]; List datas = lists[i]; if (datas != null && datas.size() > 0) { WriteSheet writeSheet = EasyExcel.writerSheet(i, sheet).head(datas.get(0).getClass()).build(); excelWriter.write(datas, writeSheet); } } } finally { // 千万别忘记finish 会帮忙关闭流 if (excelWriter != null) { excelWriter.finish(); } } } /** * Excel导出,先sourceList转换成List,再导出 * * @param response * response * @param fileName * 文件名 * @param sourceList * 原数据List * @param targetClass * 目标对象Class */ public static void exportExcelToTarget(HttpServletResponse response, String fileName, Collection sourceList, Class targetClass) throws Exception { List targetList = new ArrayList<>(sourceList.size()); for (Object source : sourceList) { Object target = targetClass.newInstance(); BeanUtils.copyProperties(source, target); targetList.add(target); } export(response, fileName, targetList, targetClass); } public static List> parseClipboard(String clipboard) { // 1. 将双引号替换成特殊字符串 String text = clipboard.replace("\"\"", "goma---Hirake"); // 2. 将引号之间的换行替换成特殊字符串 StringBuilder sb = new StringBuilder(); boolean inQuote = false; for (int i=0; i< text.length(); i++) { char chr = text.charAt(i); if (chr == '"') { inQuote = !inQuote; } if (inQuote) { if (chr == '\n') { sb.append("goma+++Hirake"); } else { sb.append(chr); } } else { sb.append(chr); } } // 3. 切分行和列 List> lists = new ArrayList<>(); String[] rows = sb.toString().split("\n"); for (int i=0; i list = new ArrayList<>(); String[] columns = rows[i].split("\t"); for (int j=0; j> res = parseClipboard(clipboard); for (List list : res) { for (String s : list) { System.out.println(s); } } } }