poi文本导出为数字

不念不忘少年蓝@ 2023-10-10 08:55 91阅读 0赞

1.需求描述

用户要求导出的金额格式为数字,不能导出为文本
在这里插入图片描述

POI导出工具类

  1. import com.platform.park.model.vo.carRecords.ExportOutOfYardVO;
  2. import io.swagger.annotations.ApiModelProperty;
  3. import org.apache.poi.hssf.usermodel.HSSFCell;
  4. import org.apache.poi.ss.usermodel.Cell;
  5. import org.apache.poi.ss.usermodel.Row;
  6. import org.apache.poi.xssf.usermodel.XSSFCell;
  7. import org.apache.poi.xssf.usermodel.XSSFRow;
  8. import org.apache.poi.xssf.usermodel.XSSFSheet;
  9. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  10. import org.springframework.cglib.beans.BeanMap;
  11. import org.springframework.stereotype.Service;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.io.IOException;
  14. import java.io.OutputStream;
  15. import java.lang.reflect.Field;
  16. import java.math.BigDecimal;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20. import java.util.Map;
  21. @Service
  22. public class ExcelExpotUtils {
  23. public static final int SHEET_PAGE_NUM = 10000;
  24. public void expoerDataExcel(HttpServletResponse response,String fileName, Class c, List<BeanMap> beanMapList) throws IOException, NoSuchFieldException {
  25. XSSFWorkbook wb = new XSSFWorkbook();
  26. // 工作表对象
  27. XSSFSheet sheet = null;
  28. //行对象
  29. Row row = null;
  30. //列对象
  31. Cell cell = null;
  32. List<String> titleList= new ArrayList<>();
  33. List<String> fieldList = new ArrayList<>();
  34. Field[] fields = c.getFields();
  35. for (Field field:fields){
  36. titleList.add(field.getAnnotation(ApiModelProperty.class).value());
  37. fieldList.add(field.getName());
  38. }
  39. //总行号
  40. int rowNo = 0;
  41. //页行号
  42. int pageRowNo = 0;
  43. if (beanMapList==null||beanMapList.size()==0){
  44. sheet = wb.createSheet("工作簿"+(rowNo/SHEET_PAGE_NUM));
  45. //动态指定当前的工作表
  46. sheet = wb.getSheetAt(rowNo/SHEET_PAGE_NUM);
  47. //新建了工作表,重置工作表的行号为0
  48. pageRowNo = 0;
  49. // -----------定义表头-----------
  50. row = sheet.createRow(pageRowNo++);
  51. // 列数 titleKeyList.size()
  52. for(int i=0;i<titleList.size();i++){
  53. Cell cellTem = row.createCell(i);
  54. cellTem.setCellValue(titleList.get(i));
  55. }
  56. }else {
  57. for (int k = 0; k < beanMapList.size(); k++) {
  58. Map<String, Object> srcMap = beanMapList.get(k);
  59. //写入SHEET_PAGE_NUM条后切换到下个工作表
  60. if (rowNo % SHEET_PAGE_NUM == 0) {
  61. // System.out.println("Current Sheet:" + rowNo/SHEET_PAGE_NUM);
  62. //建立新的sheet对象
  63. sheet = wb.createSheet("工作簿" + (rowNo / SHEET_PAGE_NUM));
  64. //动态指定当前的工作表
  65. sheet = wb.getSheetAt(rowNo / SHEET_PAGE_NUM);
  66. //新建了工作表,重置工作表的行号为0
  67. pageRowNo = 0;
  68. // -----------定义表头-----------
  69. row = sheet.createRow(pageRowNo++);
  70. // 列数 titleKeyList.size()
  71. for (int i = 0; i < titleList.size(); i++) {
  72. Cell cellTem = row.createCell(i);
  73. cellTem.setCellValue(titleList.get(i));
  74. }
  75. rowNo++;
  76. // ---------------------------
  77. }
  78. rowNo++;
  79. //新建行对象
  80. row = sheet.createRow(pageRowNo++);
  81. // 行,获取cell值
  82. for (int j = 0; j < fieldList.size(); j++) {
  83. cell = row.createCell(j);
  84. Object object = srcMap.get(fieldList.get(j));
  85. if (object != null) {
  86. if (object instanceof BigDecimal){
  87. cell.setCellValue(Double.parseDouble(object.toString()));
  88. cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
  89. }else {
  90. cell.setCellValue(object.toString());
  91. }
  92. } else {
  93. if (object instanceof BigDecimal){
  94. cell.setCellValue(0);
  95. cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
  96. }else{
  97. cell.setCellValue("");
  98. }
  99. }
  100. //设置单元格类型
  101. }
  102. }
  103. }
  104. setSizeColumn(sheet,fieldList.size()==0?1:fieldList.size());
  105. response.setContentType("application/vnd.ms-excel;charset=utf-8");
  106. response.addHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "iso8859-1") + ".xlsx");
  107. response.flushBuffer();
  108. OutputStream outputStream = response.getOutputStream();
  109. wb.write(response.getOutputStream());
  110. wb.close();
  111. outputStream.flush();
  112. outputStream.close();
  113. }
  114. // 自适应宽度(中文支持)
  115. private void setSizeColumn(XSSFSheet sheet, int size) {
  116. for (int columnNum = 0; columnNum < size; columnNum++) {
  117. int columnWidth = sheet.getColumnWidth(columnNum) / 256;
  118. System.out.println(sheet.getLastRowNum());
  119. for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
  120. XSSFRow currentRow;
  121. //当前行未被使用过
  122. if (sheet.getRow(rowNum) == null) {
  123. currentRow = sheet.createRow(rowNum);
  124. } else {
  125. currentRow = sheet.getRow(rowNum);
  126. }
  127. if (currentRow.getCell(columnNum) != null) {
  128. XSSFCell currentCell = currentRow.getCell(columnNum);
  129. if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
  130. int length = currentCell.getStringCellValue().getBytes().length;
  131. if (columnWidth < length) {
  132. columnWidth = length;
  133. }
  134. }
  135. }
  136. }
  137. sheet.setColumnWidth(columnNum, columnWidth * 256);
  138. }
  139. }
  140. public static void main(String[] args) throws NoSuchFieldException {
  141. ExportOutOfYardVO vo = new ExportOutOfYardVO();
  142. vo.setCarNo("1");
  143. vo.setFeeStandardName("322");
  144. vo.setEnterTime(new Date());
  145. vo.setLeaveTime(new Date());
  146. vo.setMoney(new BigDecimal("2324"));
  147. System.out.println( ExportOutOfYardVO.class.getFields().length);
  148. // for (int i=0; i< ExportOutOfYardVO.class.getFields().length;i++){
  149. // String a = ExportOutOfYardVO.class.getFields()[i].getAnnotation(ApiModelProperty.class).value();
  150. // String b = ExportOutOfYardVO.class.getFields()[i].getName();
  151. // System.out.println(a);
  152. // System.out.println(b);
  153. // }
  154. Object o = new BigDecimal("0.01");
  155. System.out.println(String.valueOf(o));
  156. String a = String.valueOf(o);
  157. System.out.println(a ==null);
  158. System.out.println(a.equals("null"));
  159. if (o instanceof BigDecimal){
  160. System.out.println("1122---22");
  161. System.out.println(o);
  162. }
  163. }
  164. }

发表评论

表情:
评论列表 (有 0 条评论,91人围观)

还没有评论,来说两句吧...

相关阅读

    相关 POI报表导出

    在实际项目中会遇到一些报表导出功能的开发,接下来废话不多说,直接把我在项目中用到的分享给大家 一:pom.xml导入依赖 <!-- excel poi -->