3、POI类导出Excel

 这种方式如果不是特定的环境下,还是不建议使用,因为这种方式所有的输出格式都是靠后台打出来的,如果格式有变动,则需要查看代码进行修改。

  • 首先、导入依赖

     <!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.10-FINAL</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency>
  • 第二、就是正常写个工具类生成一个固定格式的导出表,可以将list或是map数据作为参数放入到这个工具类中
public class ExcelUtil{
/*** 创建excel文档,* @param list 数据* @param keys listmap的设置列名* */public static Workbook createWorkBook(List<Map<String, Object>> listMap,List<?> list) {// 创建excel工作簿Workbook wb = new HSSFWorkbook();// 创建第一个sheet(页),并命名Sheet sheet = wb.createSheet("数据");// 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。/* for(int i=0;i<keys.length;i++){sheet.setColumnWidth((short) i, (short) (35.7 * 150));}*/// 创建第一行Row row = sheet.createRow((short) 0);// 创建两种单元格格式CellStyle cs = wb.createCellStyle();CellStyle cs2 = wb.createCellStyle();// 创建两种字体Font f = wb.createFont();Font f2 = wb.createFont();// 创建第一种字体样式(用于列名)f.setFontHeightInPoints((short) 10);f.setColor(IndexedColors.BLACK.getIndex());f.setBoldweight(Font.BOLDWEIGHT_BOLD);// 创建第二种字体样式(用于值)f2.setFontHeightInPoints((short) 10);f2.setColor(IndexedColors.BLACK.getIndex());//            Font f3=wb.createFont();
//            f3.setFontHeightInPoints((short) 10);
//            f3.setColor(IndexedColors.RED.getIndex());// 设置第一种单元格的样式(用于列名)cs.setFont(f);cs.setBorderLeft(CellStyle.BORDER_THIN);cs.setBorderRight(CellStyle.BORDER_THIN);cs.setBorderTop(CellStyle.BORDER_THIN);cs.setBorderBottom(CellStyle.BORDER_THIN);cs.setAlignment(CellStyle.ALIGN_CENTER);// 设置第二种单元格的样式(用于值)cs2.setFont(f2);cs2.setBorderLeft(CellStyle.BORDER_THIN);cs2.setBorderRight(CellStyle.BORDER_THIN);cs2.setBorderTop(CellStyle.BORDER_THIN);cs2.setBorderBottom(CellStyle.BORDER_THIN);cs2.setAlignment(CellStyle.ALIGN_CENTER);HSSFDataFormat hdf = (HSSFDataFormat)wb.createDataFormat();cs2.setDataFormat(hdf.getFormat("@"));List<Map<String, Object>> removeListMap = new ArrayList<Map<String, Object>>();for(int i=0;i<listMap.size();i++){if(Boolean.parseBoolean(listMap.get(i).get("hide")+"")){// listMap.remove(listMap.get(i));removeListMap.add(listMap.get(i));}}listMap.removeAll(removeListMap);//设置列名for(int i=0;i<listMap.size();i++){Cell cell = row.createCell(i);cell.setCellValue(listMap.get(i).get("name")+"");cell.setCellStyle(cs);}//设置每行每列的值for (int i = 0; i < list.size(); i++) {// Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的// 创建一行,在页sheet上Row row1 = sheet.createRow(i+1);// 在row行上创建一个方格for(int j=0;j<listMap.size();j++){Cell cell = row1.createCell(j);Map<String, Object> map =(Map<String, Object>) list.get(i);cell.setCellValue(map.get(listMap.get(j).get("colkey")) == null?" ": map.get(listMap.get(j).get("colkey")).toString());cell.setCellStyle(cs2);}}// 每列列宽自适应for (int i = 0; i < listMap.size(); i++) {sheet.autoSizeColumn(i);}return wb;            }
}
  • 第三、将创建的Excel进行输出
 /*** @param exportData 列表头* @param lis 数据集* @param fileName 文件名* */public static void exportToExcel(HttpServletResponse response, List<Map<String, Object>> exportData, List<?> lis,String fileName) {BufferedInputStream bis = null;BufferedOutputStream bos = null;try {ByteArrayOutputStream os = new ByteArrayOutputStream();ExcelUtil.createWorkBook(exportData, lis).write(os);byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);// 设置response参数,可以打开下载页面response.reset();response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-Disposition","attachment;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1"));ServletOutputStream out = response.getOutputStream();bis = new BufferedInputStream(is);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;// Simple read/write loop.while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (IOException e) {e.printStackTrace();} finally {try {if (bis != null)bis.close();if (bos != null)bos.close();} catch (IOException e) {}}}

Java导出基础 用POI导出Excel相关推荐

  1. Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理)

    Java教程:使用POI读取excel文档(根据BV1bJ411G7Aw整理) 最近公司需要我做一个导出Excel表格的功能,为此来学习一下POI,在这里记录一下学习笔记.B站直接搜BV1bJ411G ...

  2. cpu java poi 导出_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  3. excel导出java.lang.ArrayIndexOutOfBoundsException: 0 POI导出excel报错数组下标越界0

    好久没写博客了,最近是有点懒了... 最近项目遇到个问题,用poi导出excel,本地和测试服务器都没问题,线上所有的导出都不能用,排查过JKD版本和配置文件都没问题,百思不得其解,最终问了朋友考虑到 ...

  4. Java web项目利用POI导出EXCEL表格

    SSH2 POI导出EXCEL表格 1.首先导入poi的jar包 HSSFWorkbook :工作簿,代表一个excel的整个文档 HSSFSheet:工作表 HSSFRow :行 HSSFCell: ...

  5. iText导出pdf,poi导出excel并下载到客户端

    项目中需要做导出功能,要支持excel,pdf导出. excel导出我选择使用poi:pdf导出我选择使用iText,在此单独做记录. 先说说在设计与开发中的问题,从整体上把握设计思路. 思路(一) ...

  6. java使用Jxl和Poi读写Excel

    使用Jxl和Poi需要使用到的jar包(由于我所在电脑的权限问题,不能直接给),可自行前往下载:jar下载 要用到的jar包(最好是全下了): 1.commons-io-2.2.jar 2.dom4j ...

  7. Java 中如何解决 POI 读写 excel 几万行数据时内存溢出的问题?(附源码)

    >>号外:关注"Java精选"公众号,菜单栏->聚合->干货分享,回复关键词领取视频资料.开源项目. 1. Excel2003与Excel2007 两个版本 ...

  8. java poi 导出xlsx_java 使用poi存储Excel(.xlsx格式)

    效果图: package excel; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; i ...

  9. java mvc 导出excel_Java springMVC POI 导出 EXCEL

    思路 : 将需要导出的数据存放在一个List中 创建一个EXCEL表 注意 XSSFWorkbook 只能操作2007以上的版本,XSSFWorkbook 只能操作2003一下的版本,所以需要的时候可 ...

最新文章

  1. java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息
  2. 【Android】全角字符半角字符工具类
  3. Oracle关联更新语法(T-SQL中的update...from)
  4. Python生成器笔记
  5. java emf 转jpg_java – emf到jpg的转换
  6. 使用ActiveReports for .net 进行报表开发(十)--交叉变换背景 (转)
  7. python md5加密_python中的md5加密
  8. 云计算与大数据技术 第一章
  9. Ubuntu下的快捷键截图
  10. 如何设置计算机桌面待办事项,Windows电脑桌面云便签怎么设置每天提醒待办事项?...
  11. qemu-img命令
  12. web页面之响应式布局
  13. count(*)和count(1)和count(字段)的区别
  14. 计算机组成原理---输入输出设备
  15. 网页抓取及信息提取(一)
  16. B2B电子商务网站建设怎么做:B2B系统开发流程、语言、架构解答
  17. C语言 | 单链表的冒泡排序
  18. 单臂路由原理与实验详情
  19. Autodesk CAD2007的下载资源
  20. iOS版MapABC的简单显示地图的Demo

热门文章

  1. 安卓系统辅助功能中的指针停止移动后点击是什么?OTG
  2. Java设计模式-外观模式
  3. copyproperties爆红_BeanUtils.copyProperties复制失败探究
  4. vue :class 动态绑定样式_Vue 在哪些方面做的比 React 更好?
  5. scheduledexecutorservice 的使用_使用J.U.C实现定时任务
  6. php pdo 执行多条语句,php – 在pdo预处理语句中执行多插入或多个不同插入是更好/更快?...
  7. PE转换分区表格式为GPT
  8. ssd测试工具crystaldiskmark_使用SSD增强Ceph性能并对比测试
  9. 数据oem 操作手册_海口电销外呼系统oem-河南爱聊科技
  10. java map equals_Java中EnumMap的equals()方法: Java.util.EnumMap.equals() - Break易站