package com.manyi.iw.agent.sale.utils; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.*; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by kehui on 2014/11/14. */ public class PoiUtil { public static HSSFWorkbook initWorkbookByTemplate(List<List<String>> data, InputStream is, int offsetRow) throws IOException { return initWorkbook(data, null, is, offsetRow); } public static HSSFWorkbook initWorkbookByData(List<List<String>> data, List<String> titles, int offsetRow) throws IOException { return initWorkbook(data, titles, null, offsetRow); } /** * 可支持两种方式的xls输出 * 1.根据已有xls文件的输入流,初始化workbook,填充数据 * 2.新建workbook,根据传入数据和标题填充workbook * @param data 需要填充的数据 * @param titles 标题 * @param is 模板的输入流 * @param offsetRow 行偏移量 * @return * @throws IOException */ public static HSSFWorkbook initWorkbook(List<List<String>> data, List<String> titles, InputStream is, int offsetRow) throws IOException { HSSFWorkbook workbook = null; HSSFSheet sheet = null; if (is == null) { workbook = new HSSFWorkbook(); sheet = workbook.createSheet(); } else { workbook = new HSSFWorkbook(is); sheet = workbook.getSheetAt(0); } if (data == null || data.size() == 0) return workbook; HSSFCellStyle cellStyle = workbook.createCellStyle(); //HSSFFont font = workbook.createFont(); //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //cellStyle.setFont(font); cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); for (int i = 0; i < data.size(); i++) { List<String> rowData = data.get(i); HSSFRow row = sheet.createRow(offsetRow + i); if (i == 0 && (null != titles && titles.size() > 0)) { for (int j = 0; j < titles.size(); j++) { //HSSFCell cell = createTitleCell(row, workbook, j, rowData.get(j)); HSSFCell cell = row.createCell(j); cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(rowData.get(j)); } continue; } for (int i1 = 0; i1 < rowData.size(); i1++) { //HSSFCell cell = createTitleCell(row, workbook, i1, rowData.get(i1)); HSSFCell cell = row.createCell(i1); cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(rowData.get(i1)); } } return workbook; } public static HSSFCell createTitleCell(HSSFRow row, HSSFWorkbook workbook, int cellNumber, String cellValue) { HSSFCell cell = row.createCell(cellNumber); //cell.setEncoding(HSSFCell.ENCODING_UTF_16); HSSFCellStyle cellStyle = workbook.createCellStyle(); //HSSFFont font = workbook.createFont(); //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //cellStyle.setFont(font); cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(cellValue); return cell; } public static void main(String[] args) throws Exception{ } /** * SXSS导出 * @param data * @param titles * @param is * @param offsetRow * @return * @throws IOException */ public static SXSSFWorkbook initSXSSWorkbook(List<List<String>> data, List<String> titles,InputStream is, int offsetRow) throws IOException { XSSFWorkbook workbook = null; XSSFSheet sheet = null; if (is == null) { workbook =new XSSFWorkbook(); sheet = workbook.createSheet(); } else { workbook = new XSSFWorkbook(new BufferedInputStream(is)); sheet = workbook.getSheetAt(0); } SXSSFWorkbook newWorkbook = new SXSSFWorkbook(workbook,100); Sheet newSheet = newWorkbook.getSheetAt(0); CellStyle cellStyle = newWorkbook.createCellStyle(); if (data == null || data.size() == 0){ return newWorkbook; } for (int i = 0; i < data.size(); i++) { List<String> rowData = data.get(i); Row newRow = newSheet.createRow(offsetRow + i); if (i == 0 && (null != titles && titles.size() > 0)) { for (int j = 0; j < titles.size(); j++) { Cell cell = newRow.createCell(j); cell.setCellStyle(cellStyle); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue(rowData.get(j)); } continue; } for (int i1 = 0; i1 < rowData.size(); i1++) { Cell cell = newRow.createCell(i1); cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(rowData.get(i1)); } } return newWorkbook; } }
/** * 根据一个实体集合,获得用于填充Excel的数据 * * @param ts 实体集合 * @param fieldNames 实体中的字段名称(一定要输入正确) * @return */ public <T> List<List<String>> getExportData(List<T> ts, String... fieldNames) { if(CollectionUtils.isEmpty(ts)) return null; List<List<String>> data = new ArrayList<>(); for(T t : ts) { List<String> strs = new ArrayList<>(); for(String fn : fieldNames) { String value = ""; try { value = BeanUtils.getProperty(t, fn); } catch(IllegalAccessException e) { value = fn; } catch(InvocationTargetException e) { value = fn; } catch(NoSuchMethodException e) { value = fn; } strs.add(value); } data.add(strs); } return data; } /** * 报表导出通用方法 * * @param response * @param data 报表的填充数据 * @param templateType 导出文件所使用的模板类型 * @param offset 行偏移量 */ public void exportExcel(HttpServletResponse response, HttpServletRequest request, List<List<String>> data, String fileName, int templateType, int offset) throws IOException { ExportTemplateEnum exportTemplate = ExportTemplateEnum.getTemplate(templateType); if(null == exportTemplate) return; InputStream is = this.getClass().getClassLoader().getResourceAsStream("excel-template/" + exportTemplate.getFileName()); if(is == null) return; String exportFileName = new String((StringUtils.isBlank(fileName) ? exportTemplate.getDesc() : fileName).getBytes(request.getCharacterEncoding()), "ISO8859-1"); //后辍 exportFileName += exportTemplate.getFileName().substring(exportTemplate.getFileName().lastIndexOf(".")); response.addHeader("Content-Disposition", "attachment;filename=\"" + exportFileName + "\""); response.setContentType("application/x-download"); response.addHeader("Content-Encoding", "utf-8"); OutputStream os = response.getOutputStream(); HSSFWorkbook workbook = PoiUtil.initWorkbookByTemplate(data, is, offset); workbook.write(os); os.flush(); os.close(); is.close(); } public void exportSXSSFExcel(HttpServletResponse response, HttpServletRequest request, List<List<String>> data, String fileName, int templateType, int offset) throws IOException { ExportTemplateEnum exportTemplate = ExportTemplateEnum.getTemplate(templateType); if(null == exportTemplate) return; FileInputStream is = new FileInputStream(this.getClass().getClassLoader().getResource("excel-template/" + exportTemplate.getFileName()).getFile()); if(is == null) return; String exportFileName = new String((StringUtils.isBlank(fileName) ? exportTemplate.getDesc() : fileName).getBytes(request.getCharacterEncoding()), "ISO8859-1"); //后辍 exportFileName += exportTemplate.getFileName().substring(exportTemplate.getFileName().lastIndexOf(".")); response.addHeader("Content-Disposition", "attachment;filename=\"" + exportFileName + "\""); response.setContentType("application/x-download"); response.addHeader("Content-Encoding", "utf-8"); OutputStream os = response.getOutputStream(); SXSSFWorkbook workbook = PoiUtil.initSXSSWorkbook(data, null,is, offset); workbook.write(os); os.flush(); os.close(); is.close(); }
List<QuerySignExportResult> list4 = agentService.querySignOther(cityName, cityId, beginDate, endDate); List<List<String>> data4 = getExportData(list4, "cityName", "createTime", "agentId", "agentName", "agentMobile", "groupName", "mendianName", "areaName", "bigAreaName", "callMobile", "signName", "remark"); exportSXSSFExcel(response, request, data4, "标为其他", ExportTemplateEnum.signOther.getType(), 1);
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>${poi.version}</version> </dependency> <poi.version>3.9</poi.version>
相关推荐
以下是一个简化的示例,演示了如何使用POI导出Excel: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io....
excelpoi导出导入java.zip java的poi-excel 导出导入模型 将项目下载后,用idea的open打开,maven自动下包, 用浏览器地址栏访问一定的ip后,项目输出写出流,带特殊请求头部 ,浏览器会弹出一个下载框,点击确认...
POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...
本教程将详细介绍如何利用Apache POI库来实现使用多个Sheet(工作簿)导出一个Excel文件的功能。 一、Apache POI简介 Apache POI 是一个开源项目,提供API来读取、写入和修改Microsoft Office文件格式,如Word(DOC...
在Java环境中,如果你需要导出或者操作Excel文档,Apache POI是必不可少的工具。标题提到的"导出excel文档所需要的poi的jar包"正是指这个功能。 Apache POI的版本3.8是较早的一个稳定版本,尽管现在已经有更新的...
这个链接提供了一个详细的Java代码示例,演示了如何使用POI导出Excel。在实际开发中,你可以根据这个示例调整代码以满足自己的需求,比如添加更多的数据处理逻辑或自定义样式。记得在导入项目时,确保包含上述提到的...
学习和理解这些知识点对于开发需要处理Excel文件的Java应用至关重要,特别是在数据导入导出、报表生成、自动化测试等领域。通过实践这些示例,开发者能够掌握如何利用Apache POI高效地生成和操作Excel 2007文件,...
Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
使用POI导出Excel文件** 导出Excel文件主要涉及以下几个步骤: - **创建Workbook对象**:这是Excel文件的容器,可以使用`XSSFWorkbook`(针对.xlsx)或`HSSFWorkbook`(针对.xls)创建。 - **创建Sheet对象**:...
在Java编程领域,"poi多表头 excel导出"是一个常见的需求,特别是在数据处理和报告生成的场景中。Apache POI 是一个流行的开源库,它允许开发者使用Java来创建、修改和显示Microsoft Office格式的文件,包括Excel。...
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值), poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值) poi导出导入封装(使用注解建立实体与excel映射关系+反射设置...
在本场景中,我们关注的是如何使用 POI 来创建具有复杂表头的 Excel 导出功能。多表头通常指的是在 Excel 表格中拥有多个层次的列标题,这在处理分类数据或者构建具有嵌套结构的报告时非常有用。 ** poi 导出多表头...
Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...
在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...
这个“excel poi工具类”是利用Apache POI库来实现对Excel文件进行导入、导出、合并单元格以及处理计算公式的功能。下面我们将深入探讨这些知识点。 **1. Apache POI库介绍** Apache POI是一个开源项目,它为Java...
在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache POI进行Excel文件的导入与导出操作。 首先,我们需要在项目中集成Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...
以上就是使用Java POI导出Excel的基本步骤。你可以根据实际需求调整代码,例如添加数据遍历、样式设置、图表生成等功能。确保正确管理资源,避免内存泄漏,特别是在服务器端处理大量数据时。记得在完成后关闭工作簿...
poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列