ExportAllUtil.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /**
  2. *
  3. */
  4. package com.kingdee.shr.customer.gtiit.util;
  5. import java.io.IOException;
  6. import java.io.OutputStream;
  7. import java.io.UnsupportedEncodingException;
  8. import java.math.BigDecimal;
  9. import java.net.URLEncoder;
  10. import java.sql.Date;
  11. import java.sql.SQLException;
  12. import java.util.LinkedHashMap;
  13. import java.util.List;
  14. import java.util.stream.Collectors;
  15. import javax.servlet.http.HttpServletResponse;
  16. import org.apache.poi.hssf.usermodel.HSSFDataFormat;
  17. import org.apache.poi.ss.usermodel.DataFormat;
  18. import org.apache.poi.xssf.usermodel.XSSFCell;
  19. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  20. import org.apache.poi.xssf.usermodel.XSSFRow;
  21. import org.apache.poi.xssf.usermodel.XSSFSheet;
  22. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  23. import com.cloudera.impala.jdbc4.internal.apache.log4j.Logger;
  24. import com.kingdee.jdbc.rowset.IRowSet;
  25. /**
  26. * @author ISSUSER
  27. * 到处全部的工具类
  28. */
  29. public class ExportAllUtil {
  30. private static Logger logger1 = Logger.getLogger("com.kingdee.shr.customer.gtiit.util.ExportAllUtils");
  31. /**
  32. *
  33. * @param response
  34. * response
  35. * @param resource
  36. * 需要导出的数据源
  37. * @param fileName
  38. * 导出文件名称
  39. * @param selectFieldsTypeMap
  40. * 存放查询字段对应导出类型和导出样式 key selectField 导出字段 value
  41. * fieldType_cellStyleMap key 导出查询字段 value 导出类型_导出样式 导出样式 key
  42. * DateType 日期格式 value "yyyy-mm-dd" key NumberType 数字 value '0.0_
  43. * '->保留一位小数 '0_ '->整数 key StringType 文本 value @
  44. * @throws SQLException
  45. */
  46. public static void exportData(HttpServletResponse response, Object resource, String fileName,
  47. LinkedHashMap<String, String> selectFieldsTypeMap, List<String> list) throws SQLException {
  48. // 创建新的Excel 工作簿
  49. // Excel2003版本(包含2003)以前使用HSSFWorkbook类,扩展名为.xls
  50. // Excel2007版本(包含2007)以后使用XSSFWorkbook类,扩展名为.xlsx
  51. XSSFWorkbook workBook = new XSSFWorkbook();
  52. // 在Excel工作簿中创建新的工作表,名为"Sheet1"
  53. XSSFSheet sheet = workBook.createSheet("Sheet1");
  54. DataFormat format = workBook.createDataFormat();
  55. // 设置数字格式为整数,不保留小数 (_ )空格是必须要切勿格式
  56. if (resource != null) {
  57. if (resource instanceof IRowSet) {
  58. IRowSet rs = (IRowSet) resource;
  59. // 列数
  60. int numColumns = selectFieldsTypeMap.entrySet().size();
  61. // 创建多行多列的数据
  62. int i = 0;
  63. // 创建标题
  64. XSSFRow titleRow = sheet.createRow(i);
  65. // 列名
  66. List<String> keyList = selectFieldsTypeMap.keySet().stream().collect(Collectors.toList());
  67. //List<String> chineseList = fieldsTypeMap.keySet().stream().collect(Collectors.toList());
  68. if (i == 0) {
  69. for (int j = 0; j < numColumns; j++) {
  70. // 创建列
  71. XSSFCell cell = titleRow.createCell(j);
  72. //cell.setCellValue(keyList.get(j));
  73. //cell.setCellValue(chineseList.get(j));
  74. cell.setCellValue(list.get(j));
  75. }
  76. }
  77. i++;
  78. // 创建数据
  79. while (rs.next()) {
  80. try {
  81. XSSFRow dateRow = sheet.createRow(i);
  82. for (int j = 0; j < numColumns; j++) {
  83. // 创建列
  84. XSSFCell cell = dateRow.createCell(j);
  85. // 由于开发与测试环境的数据库类型与不一致 导致无法从数据库表读取相关字段类型判断 且有相关计算字段
  86. // 所以采用参数判断
  87. String column = keyList.get(j);
  88. String fieldTypeAndcellStyleType = selectFieldsTypeMap.get(column);
  89. int indexOf = fieldTypeAndcellStyleType.indexOf("_");
  90. // 字段属性类型
  91. String fieldType = fieldTypeAndcellStyleType.substring(0, indexOf);
  92. // 样式类型
  93. String cellStyleType = fieldTypeAndcellStyleType.substring(indexOf + 1,
  94. fieldTypeAndcellStyleType.length());
  95. // 不设置格式
  96. cell.setCellValue(rs.getString(column));
  97. if ("Date".equals(fieldType)) {
  98. // 日期
  99. // cell.setCellValue(rs.getString(column));
  100. Date date = rs.getDate(column);
  101. cell.setCellValue(date);
  102. XSSFCellStyle stylee = workBook.createCellStyle();
  103. stylee.setDataFormat(format.getFormat(cellStyleType));
  104. cell.setCellStyle(stylee);
  105. // cell.setCellValue(rs.getString(column));
  106. } else if ("Number".equals(fieldType)) {
  107. // 数值 (小数和整数)
  108. BigDecimal value = rs.getBigDecimal(column) != null ? rs.getBigDecimal(column).setScale(2, 4) : BigDecimal.ZERO;
  109. // cell.setCellValue(value);
  110. XSSFCellStyle style = workBook.createCellStyle();
  111. if (cellStyleType.contains(".")) {
  112. style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
  113. cell.setCellStyle(style);
  114. // 小数
  115. cell.setCellValue(value.doubleValue());
  116. } else {
  117. style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0"));
  118. cell.setCellStyle(style);
  119. cell.setCellValue(value.intValue());
  120. }
  121. } else if ("String".equals(fieldType)) {
  122. // 文本类型
  123. if (rs.getString(column) != null && !("").equals(rs.getString(column))) {
  124. // style.setDataFormat(format.getFormat(cellStyleType));
  125. // cell.setCellStyle(style);
  126. cell.setCellValue(rs.getString(column));
  127. }
  128. } else if ("StringDate".equals(fieldType)) {
  129. // 文本类型
  130. if (rs.getString(column) != null && !("").equals(rs.getString(column))) {
  131. cell.setCellValue(rs.getString(column).substring(0, 10));
  132. }
  133. }
  134. }
  135. i++;
  136. } catch (Exception e) {
  137. logger1.info("Excel file was created Error!" + e.getMessage());
  138. }
  139. }
  140. try {
  141. setResponseHeader(response, fileName);
  142. OutputStream os = response.getOutputStream();
  143. workBook.write(os);
  144. workBook.close();
  145. os.flush();
  146. os.close();
  147. logger1.info("Excel file was created successfully!");
  148. } catch (IOException e) {
  149. logger1.info("Error while writing to file " + e.getMessage());
  150. e.printStackTrace();
  151. }
  152. }
  153. }
  154. }
  155. public static void setResponseHeader(HttpServletResponse response, String fileName) {
  156. try {
  157. try {
  158. fileName = URLEncoder.encode(fileName, "UTF-8");
  159. } catch (UnsupportedEncodingException e) {
  160. e.printStackTrace();
  161. }
  162. response.setContentType("application/octet-stream;charset=UTF-8");
  163. response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
  164. response.addHeader("Pargam", "no-cache");
  165. response.addHeader("Cache-Control", "no-cache");
  166. } catch (Exception ex) {
  167. ex.printStackTrace();
  168. }
  169. }
  170. }