码迷,mamicode.com
首页 > 其他好文 > 详细

Excel导出

时间:2017-08-19 20:17:18      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:work   编号   tin   imp   ==   pid   工具   jar包   ted   

             Excel导出是比较常见的场景,以前都是直接用用公司的工具类,这次自己封装了一个。导出的文件的格式是xlsx的,
需要office2007才能打开。小编的上一篇解决下载中文名文件乱码的问题就是来自这个工具类。下面直接上代码

一、代码

        (1)maven依赖
  1. <!-- poi的jar包 -->
  2. <dependency>
  3. <groupId>org.apache.poi</groupId>
  4. <artifactId>poi</artifactId>
  5. <version>3.15</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.poi</groupId>
  9. <artifactId>poi-ooxml</artifactId>
  10. <version>3.15</version>
  11. </dependency>
        (2)工具类代码
  1. package com.tax.core.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  6. import org.apache.poi.ss.usermodel.VerticalAlignment;
  7. import org.apache.poi.ss.util.CellRangeAddress;
  8. import org.apache.poi.xssf.usermodel.XSSFCell;
  9. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  10. import org.apache.poi.xssf.usermodel.XSSFFont;
  11. import org.apache.poi.xssf.usermodel.XSSFRow;
  12. import org.apache.poi.xssf.usermodel.XSSFSheet;
  13. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  14. /**
  15. * Excel工具类
  16. * @author ZENG.XIAO.YAN
  17. * @date 2017年7月27日 下午3:02:22
  18. * @version v1.0
  19. */
  20. public class ExcelUtils {
  21. /**
  22. * 导出数据到Excel
  23. * @param fileName 文件名,不包含后缀
  24. * @param sheetName sheet名
  25. * @param title 标题
  26. * @param cellTitles 每一列的标题
  27. * @param autoSizeColumnNum 需要自动调整列宽的列的编号(从0开始)的数组,该参数可以为null
  28. * @param data 数据: 一行数据封装成一个ArrayList,最后将所有ArrayList封装到一个List
  29. * @param response HttpServletResponse对象
  30. * @throws Exception
  31. */
  32. public static void exportExcel(String fileName, String sheetName, String title, String[] cellTitles,
  33. int[] autoSizeColumnNum, List<ArrayList<Object>> data, HttpServletResponse response) throws Exception {
  34. /** 创建空的工作簿 */
  35. XSSFWorkbook workbook = new XSSFWorkbook();
  36. /** 创建工作表 */
  37. XSSFSheet sheet = workbook.createSheet(sheetName);
  38. /** 第一行标题处理 */
  39. // 合并单元格
  40. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, cellTitles.length-1));
  41. XSSFRow row01 = sheet.createRow(0);
  42. XSSFCell cell01 = row01.createCell(0);
  43. // 设置单元格内容
  44. cell01.setCellValue(title);
  45. // 创建单元格样式
  46. XSSFCellStyle cellStyle01 = createCellStyle(workbook,"Courier New",(short)18,true);
  47. // 设置单元格样式
  48. cell01.setCellStyle(cellStyle01);
  49. /** 第二行列标题的处理 */
  50. // 创建单元格样式
  51. XSSFCellStyle cellStyle02 = createCellStyle(workbook,"Courier New",(short)13,true);
  52. XSSFRow row02 = sheet.createRow(1);
  53. // for循环创建单元格并赋值和设置样式
  54. for (int i = 0; i < cellTitles.length; i++) {
  55. XSSFCell titleCell = row02.createCell(i);
  56. titleCell.setCellValue(cellTitles[i]);
  57. titleCell.setCellStyle(cellStyle02);
  58. }
  59. /** 中间行的处理 */
  60. // 创建单元格样式
  61. XSSFCellStyle cellStyle03 = createCellStyle(workbook,null,(short)12,false);
  62. // for循环处理
  63. for (int i = 0; i < data.size(); i++) {
  64. XSSFRow row = sheet.createRow(i + 2);
  65. for(int j = 0; j < data.get(i).size(); j++) {
  66. XSSFCell cell = row.createCell(j);
  67. Object value = data.get(i).get(j);
  68. cell.setCellValue(value == null ? "" : value.toString());
  69. cell.setCellStyle(cellStyle03);
  70. }
  71. }
  72. /** 设置自动调整列宽 */
  73. // 某些情况下,有的列内容太长需要自动调整列宽
  74. for (int i = 0; i < autoSizeColumnNum.length; i++) {
  75. sheet.autoSizeColumn(autoSizeColumnNum[i]);
  76. }
  77. /** 下载时文件名为中文:乱码解决 */
  78. // 响应的过程:
  79. // 服务器: utf-8|gbk --> iso8859-1 浏览器: iso8859-1 --> utf-8|gbk (firefox、chrome)
  80. // 服务器: gbk --> iso8859-1 浏览器: iso8859-1 --> gbk (msie)
  81. fileName = new String(fileName.getBytes("gbk"), "iso8859-1");
  82. /** 设置下载的文件名 */
  83. response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
  84. /** 向浏览器输出Excel文件 */
  85. workbook.write(response.getOutputStream());
  86. /** 关闭工作簿 */
  87. workbook.close();
  88. }
  89. /**
  90. * 创建单元格样式方法
  91. * @param workbook 工作簿
  92. * @param fontName 字体名字
  93. * @param fontSize 字体大小
  94. * @param isBlod 是否加粗
  95. * @return 单元格样式XSSFCellStyle
  96. */
  97. private static XSSFCellStyle createCellStyle(XSSFWorkbook workbook, String fontName, short fontSize,
  98. boolean isBlod) {
  99. // 通过工作簿创建样式
  100. XSSFCellStyle cellStyle = workbook.createCellStyle();
  101. // 设置水平和垂直居中
  102. cellStyle.setAlignment(HorizontalAlignment.CENTER);
  103. cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  104. // 通过工作簿创建字体
  105. XSSFFont font = workbook.createFont();
  106. // 设置字体
  107. if (null != fontName && !"".equals(fontName)) {
  108. font.setFontName(fontName);
  109. }
  110. // 设置字体大小
  111. font.setFontHeightInPoints(fontSize);
  112. // 设置字体是否加粗
  113. font.setBold(isBlod);
  114. // 把字体set到样式中
  115. cellStyle.setFont(font);
  116. return cellStyle;
  117. }
  118. }

二、工具类在struts2中使用示例

技术分享

 结果:
        技术分享
 

Excel导出

标签:work   编号   tin   imp   ==   pid   工具   jar包   ted   

原文地址:http://www.cnblogs.com/zeng1994/p/7397627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!