java实现Excel动态列导出的简单例子
可以通过该对象的set方法设置各个参数,headKey
保存结果集中,数据对应的key值,ArrayList
最佳,保证了导出列的顺序,同时限制了每个sheet页保存的最大数据行数为5W条,这些参数也可以放到属性中进行设置。
@Data
public class ExcelExportUtil {//表头private String title;//各个列的表头private List<String> headList;//各个列的元素key值private List<String> headKey;// 各个列的宽度private List<Integer> headWidth;//需要填充的数据信息private List<HashMap> data;//字体大小private int fontSize = 14;//行高private int rowHeight = 30;//列宽private int columWidth = 200;//工作表private String sheetName = "sheet";// 文件名private String fileName;HSSFWorkbook wb;HSSFSheet sheet;HSSFCellStyle headCellStyle;HttpServletResponse response;public ExcelExportUtil exportExport(HttpServletResponse response) throws IOException {this.response = response;wb = new HSSFWorkbook();int size = data.size();int count = (size - 1) / 50000 + 1;for (int i = 0; i < count; i++) {sheet = wb.createSheet(sheetName + (i + 1));exportExport(sheet,data.subList(i * 50000, ((i + 1) * 50000 > size ? size : 50000 * (i + 1))));}return this;}private void exportExport(HSSFSheet sheet, List<HashMap> data) throws IOException{//检查参数配置信息checkConfig();HSSFCellStyle cellStyle = wb.createCellStyle();HSSFDataFormat format = wb.createDataFormat();//这样才能真正的控制单元格格式,@就是指文本型cellStyle.setDataFormat(format.getFormat("@"));HSSFRow headRow = sheet.createRow(0);//设置列头元素for (int i = 0; i < headList.size(); i++) {Integer width = 15;if (headWidth != null && headWidth.size() >= headList.size()){width = headWidth.get(i);}sheet.setColumnWidth(i, 256 * width + 184);HSSFCell cellHead = headRow.createCell(i);cellHead.setCellValue(headList.get(i));cellHead.setCellStyle(headCellStyle);}//开始写入实体数据信息int a = 1;for (int i = 0; i < data.size(); i++) {HSSFRow row = sheet.createRow(a);HashMap map = data.get(i);HSSFCell cell;for (int j = 0; j < headKey.size(); j++) {cell = row.createCell(j);Object valueObject = map.get(headKey.get(j));if (valueObject == null) {valueObject = "";}if (valueObject instanceof Integer) {//取出的数据是Integercell.setCellValue(((Integer) (valueObject)).floatValue());} else if (valueObject instanceof BigDecimal) {//取出的数据是BigDecimalcell.setCellValue(((BigDecimal) (valueObject)).floatValue());} else {//取出的数据是字符串直接赋值cell.setCellStyle(cellStyle);cell.setCellValue(Strings.isNullOrEmpty(String.valueOf(valueObject)) ? "" : String.valueOf(valueObject));}}a++;}}public void flushExplorer() throws Exception{// 告诉浏览器用什么软件可以打开此文件response.setHeader("content-Type", "application/vnd.ms-excel");// 下载文件的默认名称response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "utf-8"));wb.write(response.getOutputStream());}/*** 检查数据配置问题** @throws IOException 抛出数据异常类*/protected void checkConfig() throws IOException {if (headKey == null) {throw new IOException("表头不能为空");}if (headWidth != null && headWidth.size() < headKey.size()){throw new IOException("设置宽度的列数必须超过表头列数");}if (fontSize < 0 || rowHeight < 0 || columWidth < 0) {throw new IOException("字体、宽度或者高度不能为负值");}if (Strings.isNullOrEmpty(sheetName)) {throw new IOException("工作表表名不能为NULL");}createDefaultHeadStyle();}public void createDefaultHeadStyle() {//创建表头样式headCellStyle= wb.createCellStyle();//居中headCellStyle.setAlignment(HorizontalAlignment.LEFT);//背景色headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);headCellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.PALE_BLUE.getIndex());//字体HSSFFont font = wb.createFont();font.setFontHeightInPoints((short)12);font.setBold(true); //字体增粗headCellStyle.setFont(font);headCellStyle.setBorderBottom(BorderStyle.THIN); // 下边框headCellStyle.setBorderLeft(BorderStyle.THIN);// 左边框headCellStyle.setBorderTop(BorderStyle.THIN);// 上边框headCellStyle.setBorderRight(BorderStyle.THIN);// 右边框}
}
简单的调用例子:
ExcelExportUtil excelExportUtil = new ExcelExportUtil();// 表头固定列List<String> headList = new ArrayList<>();headList.add("省");if (param.getCity() != 0){headList.add("市");}// 表头固定keyList<String> headKey = new ArrayList<>();headKey.add("province");if (param.getCity() != 0){headKey.add("city");}for (HashMap dateInfo : date){for (String key : param.getNeedType()){headList.add(dateInfo.get("day") + "日" + ConstantUtils.NEED_MAP.get(key));headKey.add(dateInfo.get("day") + "_" + key);}}excelExportUtil.setHeadList(headList);excelExportUtil.setHeadKey(headKey);excelExportUtil.setData(list);excelExportUtil.setFileName("XXX日账");excelExportUtil.exportExport(response).flushExplorer();
java实现Excel动态列导出的简单例子相关推荐
- JAVA获取excel第一列数据
JAVA获取excel第一列数据 提示 1:需要将.xlsx格式转为.xls(不懂得自行百度) 2:不要一次读取太多数据,导致内存溢出 一个简单的方法========== @GetMapping(&q ...
- java实现excel的导入导出(poi详解)
经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了.是比较好用的excel导出工具. 下面来认识一下这个它吧. 我们知道要 ...
- java 根据excel模板格式导出指定格式的excel
2017年10月31日16:40:32 做个记录.方便下次查看. 参考:java实现赋值Excel模板并写入后导出 ( ̄▽ ̄)~* ExcelUtils @Component public class ...
- java实现excel的模板导出
映入pom依赖: <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml& ...
- java 生成ppt_POI之PPT导出最简单实例
开心一笑 有个四岁的小鬼问我:哥哥你怎么长得那么丑啊? 我想了想,到他耳边说:你不要告诉别人哦.其实我就是未来的你. 他哭了... 提出问题 如何实现一个最简单的PPT导出功能呢??? 解决问题 QQ ...
- java写入excel乱码_java 导出excel中文乱码的问题
最近在网上看到一个用java来操纵Excel的open source,在weblogic上试用了一下,觉得很不错,特此向大家推荐一下. 写一个javaBean,利用JExcelApi来动态生成exce ...
- Java poi Excel xls列号数字转字母
最近遇到导出的xls中 列是动态生成的,且单元格中需要用到公式,而xls公式不是用数字列号而是用列字母来表示的,这时需要把数字的列号转成该列对应的字母.因为是按月导出 一个月最多31天,所以刚开始采用 ...
- java 在线 excel文件_Java实现最简单的在线打开保存Excel文件 - PageOffice
Java实现最简单的在线打开保存Excel文件- PageOffice 在项目开发过程中,经常会涉及到生成Excel报表,但往往系统只能通过后台生成Excel报表并保存到服务器上,若想在系统中打开Ex ...
- java读取合并单元格_工具方法:java读取Excel合并单元格(简单实例)
Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for ...
最新文章
- vue = 什么意思_Vue 00 —— 初识 Vue,从放弃到入门
- RDKit | 基于RDKit绘制带原子和键的索引、注释和立体化学
- Linux 输出重定向和的区别
- box unboxing(装箱 拆箱) C#编程指南
- C++中public、protected及private用法
- spring注入私有字段_Spring字段依赖注入示例
- 暨南大学计算机复试线2019,暨南大学2019年考研复试分数线
- 修改ubuntu的IP地址,静态IP地址
- P10全彩屏C语言编程,STC90C52RC驱动P10LED屏的程序
- 10M/s方法解决numpy下载太慢的问题!
- 计算机信息处理工具教案设计,高一信息技术《现代信息处理工具》教案
- Matlab学习1-图像处理灰度
- Scrapy框架之Spiders类理解
- Android开放root权限
- 提问 html文件谁来解析执行,2019年上初中信息技术教师资格考试面试真题
- combo 口切换配置
- linux镜像文件目录,Linux - 系统 - 文件目录
- 什么是JDK、JRE
- FPGA校招笔试题分析
- 对 Android 开发者有益的 40 条优化建议