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工具类和demo”是关于如何在Java环境中使用Apache POI库来创建和导出Excel文件的一个实践案例。Apache POI是一个流行的开源库,它允许开发者读写Microsoft Office格式的文件,包括Excel...
本项目提供了一个名为"excel生成图表工具类"的Java类库,帮助开发者通过编程方式自动化创建Excel图表,包括柱状图、折线图和饼状图。以下将详细解析这个工具类库的主要知识点: 1. **Java编程基础**:首先,你需要...
本篇将深入探讨"Excel POI 工具类",这个工具类旨在简化日常的Excel操作,提升开发效率。 Apache POI 提供了HSSF(Horizontally Stored Sheets Format)和XSSF(XML Spreadsheet Format)两个主要的API,分别用于...
在IT行业中,Excel导出工具类是经常被用于数据处理和报表生成的模块。这个工具类通常是为了简化从应用程序中批量导出数据到Excel文件的过程,使得开发者可以更高效地处理大量的结构化信息。以下是对"Excel导出工具类...
在IT行业中,生成Excel表格是一项常见的任务,尤其在数据分析、报表制作或数据交换时。针对这一需求,开发者经常需要编写自定义的代码来处理。...如果你需要处理Excel生成任务,这个工具类无疑是一个值得考虑的选择。
在Java编程中,`util_ExcelUtils`工具类是一个用于操作Excel文件的实用程序类,它可以帮助开发者方便地读取Excel文件中的数据以及生成新的Excel文件。Excel文件通常被广泛用于数据存储、报告生成和数据分析等领域,...
例如,你可以使用一些开源的代码生成工具,如MyGeneration或T4模板,它们支持读取Excel数据并生成代码。也可以编写自定义的VBA宏,或者使用Excel插件如ExcelToCode,来实现这一功能。这些工具或宏会根据预设的模板,...
本文将深入探讨一款专为非MFC(Microsoft Foundation Classes)环境设计的Excel读写工具类,该工具类能够高效地帮助开发者进行Excel文件的操作。 首先,我们来了解非MFC环境。MFC是微软提供的一套面向对象的C++库,...
在IT行业中,Excel导出工具类是一个非常实用的组件,特别是在数据分析、报表生成以及数据交换等领域。这个工具类主要是为了简化编程过程中处理Excel文件的工作,尤其是考虑到数据类型的多样性,使得开发者能够快速、...
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
本篇文章将深入探讨“C#通用Excel导入导出工具类”的实现原理及应用,主要涉及的技术点包括反射、特性以及如何创建一个高效的Excel导入导出解决方案。 首先,我们要理解反射在C#中的作用。反射是一种强大的机制,它...
"Excel创建工具类"是用于简化Excel文件操作的一种方法,它允许开发者通过编程方式快速生成和修改Excel工作簿。本篇将详细介绍如何创建这样一个工具类,以及如何利用Apache POI库(版本3.12)来实现。 Apache POI是...
Java操作Excel工具类是开发过程中常见的一种需求,尤其是在数据导入导出、数据分析或者报表生成的场景下。在Java中,我们可以使用多种库来处理Excel文件,例如Apache POI、JExcelAPI、OpenCSV等。本篇文章将重点介绍...
在IT行业中,Excel工具类是常见的一种实用程序,特别是在数据处理和分析的场景下。SpringBoot框架结合Excel工具类,可以方便地实现从数据库中获取数据并导出为Excel文件,便于用户查看、分析或者进一步处理。这个...
String outputFile = "D:\\excel\\excel.xlsx"; OutputStream outputStream = new FileOutputStream(outputFile); UtilExcel utilExcel = new UtilExcel(); String titles = "所属区域,所属车间,当前处理人,描述...
"java导出excel文档通用工具类"正是这样一个工具,它允许我们灵活地生成包含表头的Excel文件,提高开发效率。 Java中导出Excel主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java API。...
Excel工具类,支持生成自定义Excel,支持浏览器下载Excel
在IT行业中,导出Excel工具类是经常被用于数据处理和报告生成的场景。这个工具类通常包含了多种方法,能够方便地将程序中的数据结构转换为Excel格式的文件,便于用户下载、查看或进一步分析。这里我们将深入探讨导出...
Java Excel工具类主要涉及到在Java应用中处理Microsoft Excel文件的操作,包括数据的导入和导出。这个zip文件包含了两个核心的Java源代码文件:ExcelUtils.java和ExcelController.java,它们分别对应于工具类和控制...
本资源提供了一个使用Java语言结合jxl库实现的工具类,它简化了Excel文件的读写操作,并且允许对单元格样式进行自定义设置。下面我们将详细探讨相关的知识点。 1. **Java与Excel交互**: - Java通过第三方库如...