import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.BeanMap; import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRichTextString; 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.Cell; import org.apache.poi.ss.usermodel.FormulaEvaluator; 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.ss.util.NumberToTextConverter; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * @author songfeng * */ public final class ExcelUtil { private static int SHEET_SPLIT_NUM = 20000; public static void main(String[] args) { List<Map> list = new ArrayList<Map>(); for(int i=0 ; i < 20000; i++) { Map map = new HashMap<>(); map.put("a", "111"); map.put("b", "222"); map.put("c", "333"); map.put("d", "444"); map.put("e", "555"); map.put("f", "666"); map.put("g", "777"); map.put("h", "888"); map.put("i", "999"); map.put("j", "000"); map.put("k", "!!!"); map.put("l", "@@@"); map.put("m", "###"); map.put("n", "$$$"); list.add(map); } String[] title = "A,B,C,D,E,F,G,H,I,J,K,L,M,N".split(","); String[] column = "a,b,c,d,e,f,g,h,i,j,k,l,m,n".split(","); try { OutputStream os = new FileOutputStream("D:\\test.xlsx"); Long startTime = System.currentTimeMillis(); ExcelUtil.write(os, title, column, list,new CellStyleInterface(){ @Override public void dealWithCell(Cell cell, CellStyle cellStyle, DataFormat dataFormat, String name, String value) { if("skuExpireTime".equals(name)) { //set date format //cellStyle.setDataFormat(dataFormat.getFormat("yyyy-mm-dd")); //设置单元格格式为"文本" cellStyle.setDataFormat(dataFormat.getFormat("@")); cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); } } @Override public void dealWithSheet(Sheet sheet,CellStyle cellStyle, DataFormat dataFormat) { cellStyle.setDataFormat(dataFormat.getFormat("@")); sheet.setDefaultColumnStyle(3, cellStyle); } }); System.out.println("共使用"+(System.currentTimeMillis() - startTime)+"ms"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void write(OutputStream outputStream, String[] title, String[] column, List data, CellStyleInterface cellStyleInterface) { if (data.size() > 10000) { getOutputBigFile(outputStream, title, column, data,cellStyleInterface); } else { getOutputFile(outputStream, title, column, data,cellStyleInterface); } } private static void getOutputFile(OutputStream outputStream, String[] title, String[] column, List data, CellStyleInterface cellStyleInterface) { HSSFWorkbook wwb = null; try { wwb = new HSSFWorkbook(); HSSFSheet ws = null; HSSFRow row = null; HSSFCell cell = null; Iterator it = data.iterator(); int i = 0; ws = wwb.createSheet("Sheet0"); if(cellStyleInterface != null) { cellStyleInterface.dealWithSheet(ws, wwb.createCellStyle(), wwb.createDataFormat()); } row = ws.createRow(0); for (int m = 0; m < title.length; m++) { cell = row.createCell((short) m); cell.setCellValue(new HSSFRichTextString(title[m])); } int k = 0; while (it.hasNext()) { if (i / SHEET_SPLIT_NUM > k) { k = i / SHEET_SPLIT_NUM; ws = wwb.createSheet("Sheet" + k); row = ws.createRow(0); for (int l = 0; l < title.length; l++) { cell = row.createCell((short) l); cell.setCellValue(new HSSFRichTextString(title[l])); } } Object obj = it.next(); Map dataMap = new HashMap(); if(obj instanceof Map) { dataMap = (Map)obj; } else { dataMap = new BeanMap(obj); } row = ws.createRow(i - SHEET_SPLIT_NUM * k + 1); for (int j = 0; j < column.length; j++) { cell = row.createCell((short) j); String columnName = column[j]; cell.setCellValue(new HSSFRichTextString(getValue(dataMap, columnName))); if(cellStyleInterface != null) { cellStyleInterface.dealWithCell(cell, wwb.createCellStyle(), wwb.createDataFormat(), columnName, getValue(dataMap, columnName)); } } i++; } for (int j = 0; j < column.length; j++) { ws.autoSizeColumn(j); } wwb.write(outputStream); } catch (Exception e) { e.printStackTrace(); try { outputStream.close(); } catch (Exception e1) { e1.printStackTrace(); } } finally { try { outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } private static void getOutputBigFile(OutputStream outputStream, String[] title, String[] column, List data, CellStyleInterface cellStyleInterface) { try { SXSSFWorkbook wb = new SXSSFWorkbook(5000); Sheet ws = null; Row row = null; Cell cell = null; Iterator it = data.iterator(); int i = 0; ws = wb.createSheet("Sheet0"); if(cellStyleInterface != null) { cellStyleInterface.dealWithSheet(ws, wb.createCellStyle(), wb.createDataFormat()); } row = ws.createRow(0); for (int m = 0; m < title.length; m++) { cell = row.createCell((short) m); cell.setCellValue(new HSSFRichTextString(title[m])); } int k = 0; while (it.hasNext()) { if (i / SHEET_SPLIT_NUM > k) { k = i / SHEET_SPLIT_NUM; ws = wb.createSheet("Sheet" + k); row = ws.createRow(0); for (int l = 0; l < title.length; l++) { cell = row.createCell((short) l); cell.setCellValue(new HSSFRichTextString(title[l])); } } Object obj = it.next(); Map dataMap = new HashMap(); if(obj instanceof Map) { dataMap = (Map)obj; } else { dataMap = new BeanMap(obj); } row = ws.createRow(i - SHEET_SPLIT_NUM * k + 1); for (int j = 0; j < column.length; j++) { cell = row.createCell((short) j); String columnName = column[j]; cell.setCellValue(new HSSFRichTextString(getValue(dataMap, columnName))); if(cellStyleInterface != null) { cellStyleInterface.dealWithCell(cell, wb.createCellStyle(), wb.createDataFormat(), columnName, getValue(dataMap, columnName)); } } i++; } for (int j = 0; j < column.length; j++) { ws.autoSizeColumn(j); } wb.write(outputStream); } catch (Exception e) { e.printStackTrace(); try { outputStream.close(); } catch (Exception e1) { e1.printStackTrace(); } } finally { try { outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } private static String getValue(Map dataMap, String columnName) { return (dataMap.get(columnName) == null) || (String.valueOf(dataMap.get(columnName)).equalsIgnoreCase("null")) ? "" : String.valueOf(dataMap.get(columnName)).trim(); } /** * 根据文件路径和行数读取文件内容,并返回Map集合对象 * @param fileItem FileItem * @param cellNumber 每行单元格数量 * @param sheetNumer sheet编号,从0开始 * @param start 第几行开始读取数据 * @return */ public static List<Map<Integer, Object>> readObjFromXls(FileItem fileItem, int cellNumber, int sheetNumer,int start) { Workbook wb = null; List<Map<Integer, Object>> listMap = new ArrayList<Map<Integer, Object>>(); try { if (isExcel2003(fileItem.getName())) { wb = new HSSFWorkbook(fileItem.getInputStream()); } else { wb = new XSSFWorkbook(fileItem.getInputStream()); } // 循环工作表Sheet Sheet sheet = wb.getSheetAt(sheetNumer); // 默认取第一个模板 if (null == sheet) {// 如果sheet为null则模板不匹配 throw new Exception("导入模板与所选的导入方案不匹配"); } // HSSFRow titleRow = hssfSheet.getRow(0); // 第一行,表头 FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator(); Map<Integer, Object> map = null; for (int rowNum = start; rowNum <= sheet.getLastRowNum(); rowNum++) { map = new HashMap<Integer, Object>(); Row row = sheet.getRow(rowNum); if (row == null) { continue; } // 开始读行 for (int cellNum = 0; cellNum < cellNumber; cellNum++) { Cell cell = row.getCell(cellNum); if (cell == null) { map.put(cellNum, ""); // 存放第多少列的值 continue; } // 具体读取单元格的值 String value = getValue(cell,eval); // 当前行的第(cellNum+1)个单元格里面的值 if (!StringUtils.isEmpty(value) && value.endsWith(".0")) { // 判断是否以.0结尾 value = value.substring(0, value.lastIndexOf(".0")); } map.put(cellNum, value); // 存放第多少列的值 } listMap.add(map); } } catch (Exception e) { e.printStackTrace(); } finally { try { fileItem.getInputStream().close(); } catch (IOException e) { e.printStackTrace(); } } return listMap; } /** * 获取单元格里面的值 * * @param cell * @return */ private static String getValue(Cell cell,FormulaEvaluator eval) { String value = ""; switch (eval.evaluateInCell(cell).getCellType()) { case Cell.CELL_TYPE_STRING:// excel数据是字符串类型 value = cell.getStringCellValue(); break; case Cell.CELL_TYPE_FORMULA:// excel数据是公式生成的 value = cell.getCellFormula(); // eval.evaluateFormulaCell(hssfCell); // CellValue cell = eval.evaluate(hssfCell); // value = cell.getStringValue(); break; case Cell.CELL_TYPE_NUMERIC:// excel数据是数字类型 value = NumberToTextConverter.toText(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_BLANK:// excel数据是空值 value = ""; break; case Cell.CELL_TYPE_ERROR:// excel数据类型读取出错 value = ""; break; } return value; } /** * 是否是excel2003 * @param filePath * @return */ public static boolean isExcel2003(String filePath) { return filePath.matches("^.+\\.(?i)(xls)$"); } /** * 是否是excel2007 * @param filePath * @return */ public static boolean isExcel2007(String filePath) { return filePath.matches("^.+\\.(?i)(xlsx)$"); } }
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.Sheet; public interface CellStyleInterface { void dealWithCell(Cell cell, CellStyle cellStyle, DataFormat dataFormat,String name, String value); void dealWithSheet(Sheet sheet, CellStyle cellStyle, DataFormat dataFormat); }
相关推荐
java导出excel,webbook用的是XSSFWorkbook,可以导出超6W的数据,这里提供了两种导出方法
excel根据表格模板生成图表工具类,注释比较详细,包括生成柱状/折线/饼状图,如果不适用参考里面写的api也是可以的方法说明写的比较清楚
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
Excel工具类,操作Excel文件,读取文件中的信息,写入生成excel文件
提供了一个可以一个方法生成excel并回传给客户端下载的工具类。方法已经封装好,只需将要导出的类传入方法中即可。压缩文件提供的是源码文件,包含一个工具类和一个注解类,详情看压缩包中的说明文本
String outputFile = "D:\\excel\\excel.xlsx"; OutputStream outputStream = new FileOutputStream(outputFile); UtilExcel utilExcel = new UtilExcel(); String titles = "所属区域,所属车间,当前处理人,描述...
使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类
Excel工具类,支持生成自定义Excel,支持浏览器下载Excel
利用hutool工具从数据库生成Excel表结构实例, 生成的excel中,每个表一个sheet,表目录带有超链接。
java导出excel文档通用工具类,使用方便。 可选择性的生成报表表头。
使用jxl写的生成excel报表的工具类 List[]> headerList1 = generalHeaderData1(); List[]> headerList2 = generalHeaderData2(); List[]> elementList = generalTBodyData(); List[]> countList= ...
读取excel生成data工具源码,并自动生成excel数据表对应的类和读取类,生成的类包括Lua和C#
easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
Class类工具 \Cookie工具类 \excel读取 工具类\Java如何生成验证码图片和点击刷新验证码\java获取当前月第一天和最后一天,上个月第一天和最后一天\java实现ftp文件的上传与下载\Json工具类 - JsonUtils.java\JS...
游戏开发中,免不了 会有一些数据是...程序肯定是需要对这些表格进行读取的,这个工具就是可以将Excel表格中的数据 读取成XML,在通过程序中的XML工具类对XML数据进行获取。 博客也会更新这个工具的源码 还有 使用过程
通用的Java工具类,主要包括基础工具类(时间、正则表达式、字符串、随机数等等),excel解析生成、word解析生成、文件操作、图片操作、敏感字、加解密等等
使用poi在excel中生成各种常见的图像,比如饼状图(普通饼状图、三D图,环状体、折线图、柱状图、等~~)
excel生成实体类,本人有使用过,无问题,直接生成实体类:有注释,set,get方法
本文档记录部分生成excel时需要的部分小的处理工具类,可以更加简洁的进行文件生成。
EXCEL必备工具箱:批量读取控件值功能,本功能将文档中大量的文本框之类的控件值批量读取到所在单元格的里(2021.02.13) EXCEL必备工具箱:数字与汉字互转功能,可以根据需要,将字符串中的1234567890和一二三四五六...