From dda5e3d12e6c389ec44972e3abe40955e459d79a Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 04 九月 2025 18:35:03 +0800
Subject: [PATCH] 改bug
---
server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java | 741 +++++++++++++++++++-------------------------------------
1 files changed, 250 insertions(+), 491 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java b/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
index cfeb782..c6090e0 100644
--- a/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
+++ b/server/services/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -1,43 +1,30 @@
package com.doumee.core.annotation.excel;
+import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
+import com.doumee.dao.business.model.Goodsorder;
import lombok.AllArgsConstructor;
import lombok.Data;
-import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.CharUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.poi.hssf.usermodel.HSSFRichTextString;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.AnnotationConfigurationException;
-import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.io.InputStream;
import java.io.OutputStream;
-import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
-import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* Excel瀵煎嚭瀹炵幇
* @author Eva.Caesar Liu
- * @date 2022/04/18 18:12
+ * @date 2023/02/14 11:14
*/
@Data
public class ExcelExporter<T> {
@@ -48,13 +35,6 @@
private ExcelExporter(){}
-
-
- private final static Logger log = LoggerFactory.getLogger(ExcelExporter.class);
-
- private final static String EXCEL2003 = "xls";
- private final static String EXCEL2007 = "xlsx";
-
/**
* 鏋勯�犲櫒
* @param modelClass 瀹炰綋Class瀵硅薄
@@ -63,6 +43,75 @@
ExcelExporter<T> excelExporter = new ExcelExporter<>();
excelExporter.setModelClass(modelClass);
return excelExporter;
+ }
+ /**
+ * 瀵煎嚭鍒版寚瀹氳緭鍑烘祦
+ * @param data 鏁版嵁
+ * @param sheetName Sheet鍚嶇О
+ */
+ public void exportWithFirstAndEnd (List<T> data, String sheetName,String first,String end, OutputStream os) {
+ SXSSFWorkbook sxssfWorkbook;
+ try {
+ sxssfWorkbook = new SXSSFWorkbook();
+ Sheet sheet = sxssfWorkbook.createSheet(sheetName);
+ // 鍒涘缓鍒楀ご
+ sheet.createFreezePane(0, 2);
+ sheet.addMergedRegion(new CellRangeAddress(0 ,0,0,this.getColumns().size()-1));
+ Row title = sheet.createRow(0);
+ title.setHeight((short) 1000);
+ Cell c = title.createCell(0);
+ c.setCellValue(first);
+ configFirstCell(sxssfWorkbook,c);
+
+ Row header = sheet.createRow(1);
+ List<ColumnInfo> columns = this.getColumns();
+ for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
+ ColumnInfo column = columns.get(columnIndex);
+ Cell cell = header.createCell(columnIndex);
+ cell.setCellValue(column.columnConfig.name());
+ // 鍒楀璁剧疆
+ if (column.columnConfig.width() == -1) {
+ sheet.setColumnWidth(columnIndex, column.columnConfig.name().length() * 2 * 256);
+ } else {
+ sheet.setColumnWidth(columnIndex, column.columnConfig.width() * 2 * 256);
+ }
+ // 璁剧疆鍒楀ご鍗曞厓鏍�
+ configHeaderCell(sxssfWorkbook, cell, column.columnConfig);
+ }
+ // 鍒涘缓鏁版嵁璁板綍
+ for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
+ Row row = sheet.createRow(rowIndex + 2);
+ for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
+ ColumnInfo column = columns.get(columnIndex);
+ Cell cell = row.createCell(columnIndex);
+ cell.setCellValue(getCellData(column, data.get(rowIndex)));
+
+ // 璁剧疆鏁版嵁鍗曞厓鏍�
+ configDataCell(sxssfWorkbook, cell, column.columnConfig);
+
+ }
+ }
+
+
+ sheet.addMergedRegion(new CellRangeAddress(data.size()+2 ,data.size()+2,0,this.getColumns().size()-1));
+ Row endRow = sheet.createRow(data.size()+2);
+// endRow.setHeight((short) 600);
+ Cell c1 = endRow.createCell(0);
+ c1.setCellValue(end);
+ configEndCell(sxssfWorkbook,c1);
+ sxssfWorkbook.write(os);
+ os.close();
+ } catch (Exception e) {
+ throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
/**
@@ -75,8 +124,6 @@
SXSSFWorkbook sxssfWorkbook;
try {
sxssfWorkbook = new SXSSFWorkbook();
-
- CellStyle style = sxssfWorkbook.createCellStyle();
Sheet sheet = sxssfWorkbook.createSheet(sheetName);
// 鍒涘缓鍒楀ご
sheet.createFreezePane(0, 1);
@@ -93,7 +140,7 @@
sheet.setColumnWidth(columnIndex, column.columnConfig.width() * 2 * 256);
}
// 璁剧疆鍒楀ご鍗曞厓鏍�
- configHeaderCell(sxssfWorkbook, cell, column.columnConfig,style);
+ configHeaderCell(sxssfWorkbook, cell, column.columnConfig);
}
// 鍒涘缓鏁版嵁璁板綍
for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
@@ -102,10 +149,95 @@
ColumnInfo column = columns.get(columnIndex);
Cell cell = row.createCell(columnIndex);
cell.setCellValue(getCellData(column, data.get(rowIndex)));
+
// 璁剧疆鏁版嵁鍗曞厓鏍�
- configDataCell(sxssfWorkbook, cell, column.columnConfig,style);
+ configDataCell(sxssfWorkbook, cell, column.columnConfig);
+
}
}
+ sxssfWorkbook.write(os);
+ os.close();
+ } catch (Exception e) {
+ throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+// public void exportList (List<List<String>> data, String fileName, String sheetName, HttpServletResponse response) {
+// try {
+// String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
+// response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+// response.setContentType("application/octet-stream");
+// response.setHeader("eva-opera-type", "download");
+// response.setHeader("eva-download-filename", encodeFileName);
+// this.exportList(data, sheetName, response.getOutputStream());
+// } catch (IOException e) {
+// throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+// }
+// }
+
+
+ /**
+ * 瀵煎嚭鍒版寚瀹氳緭鍑烘祦
+ * @param os 杈撳嚭娴�
+ */
+ public static void exportList (List<List<String>> dataList ,String sheetName, OutputStream os) {
+ SXSSFWorkbook sxssfWorkbook;
+ try {
+ sxssfWorkbook = new SXSSFWorkbook();
+ Sheet sheet = sxssfWorkbook.createSheet(sheetName);
+ // 鍒涘缓鍒楀ご
+ sheet.createFreezePane(0, 1);
+ Row header = sheet.createRow(0);
+ CellStyle hstyle = configHeaderCellStatic(sxssfWorkbook);
+ for (int i = 0; i < dataList.size(); i++) {
+ Cell cell = header.createCell(i);
+ cell.setCellValue(dataList.get(i).get(Constants.ZERO));
+ // 鍒楀璁剧疆
+ sheet.setColumnWidth(i, dataList.get(i).get(Constants.ZERO).length() * 2 * 256);
+ // 璁剧疆鍒楀ご鍗曞厓鏍�
+ cell.setCellStyle(hstyle);
+ }
+
+ //鎬昏鏁�
+ Integer rowSize = dataList.get(Constants.ZERO).size();
+ //鎬诲垪鏁�
+ Integer columnSize = dataList.size();
+ for (int i = 1; i < rowSize; i++) {
+ Row row = sheet.createRow(i);
+ for (int j = 0; j < columnSize; j++) {
+ Cell cell = row.createCell(j);
+ cell.setCellValue(dataList.get(j).get(i));
+ }
+ }
+//
+// List<String> headerList =dataList.get(0);
+// for (int i = 0; i < headerList.size(); i++) {
+// Cell cell = header.createCell(i);
+// cell.setCellValue(headerList.get(i));
+// // 鍒楀璁剧疆
+// sheet.setColumnWidth(i, headerList.get(i).length() * 2 * 256);
+// // 璁剧疆鍒楀ご鍗曞厓鏍�
+// cell.setCellStyle(hstyle);
+// }
+// // 鍒涘缓鏁版嵁璁板綍
+// for (int rowIndex = 1; rowIndex < dataList.size(); rowIndex++) {
+// Row row = sheet.createRow(rowIndex );
+// List<String> rowList = dataList.get(rowIndex);
+// for (int i = 0; i < rowList.size(); i++) {
+// Cell cell = row.createCell(i);
+// cell.setCellValue(rowList.get(i));
+// // 鍒楀璁剧疆
+// cell.setCellStyle(cstyle);
+// }
+// }
sxssfWorkbook.write(os);
os.close();
} catch (Exception e) {
@@ -140,26 +272,6 @@
throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
}
}
-
- /**
- * 瀵煎嚭鑷冲搷搴旀祦
- * @param data 鏁版嵁
- * @param fileName Excel鏂囦欢鍚�
- * @param response HttpServletResponse瀵硅薄
- */
- public void export (List<T> data, String fileName, HttpServletResponse response) {
- this.export(data, fileName, DEFAULT_SHEET_NAME, response);
- }
- /**
- * 瀵煎嚭鑷冲搷搴旀祦
- * @param data 鏁版嵁
- * @param fileName Excel鏂囦欢鍚�
- * @param response HttpServletResponse瀵硅薄
- */
- public void exportWithFirstAndEnd (List<T> data, String fileName,String first,String end, HttpServletResponse response) {
- this.exportWithFirstAndEnd(data, fileName, DEFAULT_SHEET_NAME, first,end,response);
- }
-
/**
* 瀵煎嚭鑷冲搷搴旀祦
* @param data 鏁版嵁
@@ -179,74 +291,48 @@
throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
}
}
- /**
- * 瀵煎嚭鍒版寚瀹氳緭鍑烘祦
- * @param data 鏁版嵁
- * @param sheetName Sheet鍚嶇О
- */
- public void exportWithFirstAndEnd (List<T> data, String sheetName,String first,String end, OutputStream os) {
- SXSSFWorkbook sxssfWorkbook;
- try {
- sxssfWorkbook = new SXSSFWorkbook();
- Sheet sheet = sxssfWorkbook.createSheet(sheetName);
- // 鍒涘缓鍒楀ご
- sheet.createFreezePane(0, 2);
- sheet.addMergedRegion(new CellRangeAddress(0 ,0,0,this.getColumns().size()-1));
- Row title = sheet.createRow(0);
- title.setHeight((short) 1000);
- Cell c = title.createCell(0);
- c.setCellValue(first);
- configFirstCell(sxssfWorkbook,c);
- Row header = sheet.createRow(1);
- header.setHeight((short)600);
- List<ColumnInfo> columns = this.getColumns();
- for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
- ColumnInfo column = columns.get(columnIndex);
- Cell cell = header.createCell(columnIndex);
- cell.setCellValue(new HSSFRichTextString(column.columnConfig.name()));
- // 鍒楀璁剧疆
- if (column.columnConfig.width() == -1) {
- sheet.setColumnWidth(columnIndex, column.columnConfig.name().length() * 2 * 256);
- } else {
- sheet.setColumnWidth(columnIndex, column.columnConfig.width() * 2 * 256);
- }
- // 璁剧疆鍒楀ご鍗曞厓鏍�
- configHeaderCell(sxssfWorkbook, cell, column.columnConfig);
- }
- // 鍒涘缓鏁版嵁璁板綍
- for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
- Row row = sheet.createRow(rowIndex + 2);
- for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
- ColumnInfo column = columns.get(columnIndex);
- Cell cell = row.createCell(columnIndex);
- cell.setCellValue(getCellData(column, data.get(rowIndex)));
- // 璁剧疆鏁版嵁鍗曞厓鏍�
- configDataCell(sxssfWorkbook, cell, column.columnConfig);
- }
- }
- if(StringUtils.isNotBlank(end)){
- sheet.addMergedRegion(new CellRangeAddress(data.size()+2 ,data.size()+2,0,this.getColumns().size()-1));
- Row endRow = sheet.createRow(data.size()+2);
-// endRow.setHeight((short) 600);
- Cell c1 = endRow.createCell(0);
- c1.setCellValue(end);
- configEndCell(sxssfWorkbook,c1);
- }
- sxssfWorkbook.write(os);
- os.close();
- } catch (Exception e) {
- throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
- } finally {
- if (os != null) {
- try {
- os.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
+ /**
+ * 瀵煎嚭鑷冲搷搴旀祦
+ * @param data 鏁版嵁
+ * @param fileName Excel鏂囦欢鍚�
+ * @param response HttpServletResponse瀵硅薄
+ */
+ public void export (List<T> data, String fileName, HttpServletResponse response) {
+
+ this.export(data, fileName, DEFAULT_SHEET_NAME, response);
}
+ /**
+ * 瀵煎嚭鑷冲搷搴旀祦
+ * @param data 鏁版嵁
+ * @param fileName Excel鏂囦欢鍚�
+ * @param response HttpServletResponse瀵硅薄
+ */
+ public void exportWithFirstAndEnd (List<T> data, String fileName,String first,String end, HttpServletResponse response) {
+ this.exportWithFirstAndEnd(data, fileName, DEFAULT_SHEET_NAME, first,end,response);
+ }
+
+ /**O
+ * 鑾峰彇鍒楅泦鍚�
+ */
+ private List<ColumnInfo> getColumns () {
+ Map<Integer, ColumnInfo> sortedFields = new TreeMap<>();
+ Field[] fields = modelClass.getDeclaredFields();
+ int index = 0;
+ for (Field field : fields) {
+ ExcelColumn excelColumn = field.getAnnotation(ExcelColumn.class);
+ if (excelColumn == null) {
+ continue;
+ }
+ if (sortedFields.get(excelColumn.index()) != null) {
+ throw new AnnotationConfigurationException("Excel column contains the same index.");
+ }
+ sortedFields.put(excelColumn.index() == -1 ? index : excelColumn.index(), new ColumnInfo(excelColumn, field));
+ index++;
+ }
+ return new ArrayList<>(sortedFields.values());
+ }
+
/**
* 閰嶇疆鏁版嵁鍗曞厓鏍�
*/
@@ -272,6 +358,54 @@
style.setWrapText(true);
cell.setCellStyle(style);
}
+
+ /**
+ * 閰嶇疆鍒楀ご鍗曞厓鏍�
+ */
+ private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
+ CellStyle style = workbook.createCellStyle();
+ style.setAlignment(columnConfig.align());
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ // 璁剧疆鑳屾櫙
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ style.setFillForegroundColor(columnConfig.backgroundColor().getIndex());
+ // 瀛椾綋
+ Font font = workbook.createFont();
+ font.setFontHeightInPoints(columnConfig.fontSize());
+ style.setFont(font);
+ // 璁剧疆杈规
+ configCellBorder(style);
+ cell.setCellStyle(style);
+ }
+ private static CellStyle configHeaderCellStatic (SXSSFWorkbook workbook) {
+ CellStyle style = workbook.createCellStyle();
+ style.setAlignment(HorizontalAlignment.CENTER);
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ // 璁剧疆鑳屾櫙
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ // 瀛椾綋
+ Font font = workbook.createFont();
+ font.setFontHeightInPoints((short) 12);
+ style.setFont(font);
+ // 璁剧疆杈规
+ configCellBorder(style);
+ return style;
+ }
+ private static CellStyle configCellStatic (SXSSFWorkbook workbook) {
+ CellStyle style = workbook.createCellStyle();
+ style.setAlignment(HorizontalAlignment.CENTER);
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ // 璁剧疆鑳屾櫙
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ // 瀛椾綋
+ Font font = workbook.createFont();
+ font.setFontHeightInPoints((short) 12);
+ style.setFont(font);
+ // 璁剧疆杈规
+ configCellBorder(style);
+ return style;
+ }
/**
* 閰嶇疆鍒楀ご鍗曞厓鏍�
*/
@@ -281,11 +415,10 @@
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 璁剧疆鑳屾櫙
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
- style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
+ style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
// 瀛椾綋
Font font = workbook.createFont();
- font.setFontHeightInPoints((short)24);
- font.setBold(true);
+ font.setFontHeightInPoints((short)18);
style.setFont(font);
// 璁剧疆杈规
configCellBorder(style);
@@ -309,101 +442,11 @@
configCellBorder(style);
cell.setCellStyle(style);
}
- /**
- * 閰嶇疆鍒楀ご鍗曞厓鏍�
- */
- private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
- CellStyle style = workbook.createCellStyle();
- style.setAlignment(columnConfig.align());
- style.setVerticalAlignment(VerticalAlignment.CENTER);
- // 璁剧疆鑳屾櫙
- style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-// style.setFillForegroundColor(columnConfig.backgroundColor().getIndex());
- style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
- // 瀛椾綋
- Font font = workbook.createFont();
- font.setFontHeightInPoints((short)11);
- font.setColor(columnConfig.color().index);
- font.setBold(true);
- style.setFont(font);
- // 璁剧疆杈规
- style.setWrapText(true);
- configCellBorder(style);
- cell.setCellStyle(style);
- }
- /**
- * 鑾峰彇鍒楅泦鍚�
- */
- private List<ColumnInfo> getColumns () {
- Map<Integer, ColumnInfo> sortedFields = new TreeMap<>();
- Field[] fields = modelClass.getDeclaredFields();
- int index = 0;
- for (Field field : fields) {
- ExcelColumn excelColumn = field.getAnnotation(ExcelColumn.class);
- if (excelColumn == null) {
- continue;
- }
- if (sortedFields.get(excelColumn.index()) != null) {
- throw new AnnotationConfigurationException("Excel column contains the same index.");
- }
- sortedFields.put(excelColumn.index() == -1 ? index : excelColumn.index(), new ColumnInfo(excelColumn, field));
- index++;
- }
- return new ArrayList<>(sortedFields.values());
- }
-
- public static void main(String[] args) {
- ExcelExporter m = new ExcelExporter();
-// ExcelExporter.build(UserSalaryListVO.class).getColumns();
- }
- /**
- * 閰嶇疆鏁版嵁鍗曞厓鏍�
- */
- private void configDataCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig, CellStyle style) {
- // CellStyle style = workbook.createCellStyle();
- style.setAlignment(columnConfig.align());
- style.setVerticalAlignment(VerticalAlignment.CENTER);
- // 璁剧疆鑳屾櫙
- style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
- style.setFillForegroundColor(columnConfig.dataBackgroundColor().getIndex());
- // 瀛椾綋
- Font font = workbook.createFont();
- font.setFontHeightInPoints(columnConfig.fontSize());
- // 瀛椾綋棰滆壊
- font.setColor(columnConfig.color().getIndex());
- // 绮椾綋
- font.setBold(columnConfig.bold());
- // 鏂滀綋
- font.setItalic(columnConfig.italic());
- style.setFont(font);
- // 杈规
- configCellBorder(style);
- cell.setCellStyle(style);
- }
-
- /**
- * 閰嶇疆鍒楀ご鍗曞厓鏍�
- */
- private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig,CellStyle style) {
- // CellStyle style = workbook.createCellStyle();
- style.setAlignment(columnConfig.align());
- style.setVerticalAlignment(VerticalAlignment.CENTER);
- // 璁剧疆鑳屾櫙
- style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
- style.setFillForegroundColor(columnConfig.backgroundColor().getIndex());
- // 瀛椾綋
- Font font = workbook.createFont();
- font.setFontHeightInPoints(columnConfig.fontSize());
- style.setFont(font);
- // 璁剧疆杈规
- configCellBorder(style);
- cell.setCellStyle(style);
- }
/**
* 閰嶇疆鍗曞厓鏍艰竟妗�
*/
- private void configCellBorder (CellStyle style) {
+ private static void configCellBorder (CellStyle style) {
style.setBorderTop(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
@@ -471,289 +514,5 @@
private Field field;
}
-
-
-
- public static <T> List<T> readExcel(String path, Class<T> cls, MultipartFile file) {
-
- String fileName = file.getOriginalFilename();
- if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
- log.error("涓婁紶鏂囦欢鏍煎紡涓嶆纭�");
- }
- List<T> dataList = new ArrayList<>();
- Workbook workbook = null;
- try {
- InputStream is = file.getInputStream();
- if (fileName.endsWith(EXCEL2007)) {
- workbook = new XSSFWorkbook(is);
- }
- if (fileName.endsWith(EXCEL2003)) {
- workbook = new HSSFWorkbook(is);
- }
- if (workbook != null) {
- //绫绘槧灏� 娉ㄨВ value-->bean columns
- Map<String, List<Field>> classMap = new HashMap<>();
- List<Field> fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList());
- fields.forEach(
- field -> {
- ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
- if (annotation != null) {
- String value = annotation.name();
- if (StringUtils.isBlank(value)) {
- return;//return璧峰埌鐨勪綔鐢ㄥ拰continue鏄浉鍚岀殑 璇硶
- }
- if (!classMap.containsKey(value)) {
- classMap.put(value, new ArrayList<>());
- }
- field.setAccessible(true);
- classMap.get(value).add(field);
- }
- }
- );
- //绱㈠紩-->columns
- Map<Integer, List<Field>> reflectionMap = new HashMap<>(16);
- //榛樿璇诲彇绗竴涓猻heet
- Sheet sheet = workbook.getSheetAt(0);
-
- boolean firstRow = true;
- for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
- Row row = sheet.getRow(i);
- //棣栬 鎻愬彇娉ㄨВ
- if (firstRow) {
- for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
- Cell cell = row.getCell(j);
- String cellValue = getCellValue(cell);
- if (classMap.containsKey(cellValue)) {
- reflectionMap.put(j, classMap.get(cellValue));
- }
- }
- firstRow = false;
- } else {
- //蹇界暐绌虹櫧琛�
- if (row == null) {
- continue;
- }
- try {
- T t = cls.newInstance();
- //鍒ゆ柇鏄惁涓虹┖鐧借
- boolean allBlank = true;
- for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
- if (reflectionMap.containsKey(j)) {
- Cell cell = row.getCell(j);
- String cellValue = getCellValue(cell);
- if (StringUtils.isNotBlank(cellValue)) {
- allBlank = false;
- }
- List<Field> fieldList = reflectionMap.get(j);
- fieldList.forEach(
- x -> {
- try {
- handleField(t, cellValue, x);
- } catch (Exception e) {
- log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e);
- }
- }
- );
- }
- }
- if (!allBlank) {
- dataList.add(t);
- } else {
- log.warn(String.format("row:%s is blank ignore!", i));
- }
- } catch (Exception e) {
- log.error(String.format("parse row:%s exception!", i), e);
- }
- }
- }
- }
- } catch (Exception e) {
- log.error(String.format("parse excel exception!"), e);
- } finally {
- if (workbook != null) {
- try {
- workbook.close();
- } catch (Exception e) {
- log.error(String.format("parse excel exception!"), e);
- }
- }
- }
- return dataList;
- }
-
- private static <T> void handleField(T t, String value, Field field) throws Exception {
- Class<?> type = field.getType();
- if (type == null || type == void.class || StringUtils.isBlank(value)) {
- return;
- }
- if (type == Object.class) {
- field.set(t, value);
- //鏁板瓧绫诲瀷
- } else if (type.getSuperclass() == null || type.getSuperclass() == Number.class) {
- if (type == int.class || type == Integer.class) {
- field.set(t, NumberUtils.toInt(value));
- } else if (type == long.class || type == Long.class) {
- field.set(t, NumberUtils.toLong(value));
- } else if (type == byte.class || type == Byte.class) {
- field.set(t, NumberUtils.toByte(value));
- } else if (type == short.class || type == Short.class) {
- field.set(t, NumberUtils.toShort(value));
- } else if (type == double.class || type == Double.class) {
- field.set(t, NumberUtils.toDouble(value));
- } else if (type == float.class || type == Float.class) {
- field.set(t, NumberUtils.toFloat(value));
- } else if (type == char.class || type == Character.class) {
- field.set(t, CharUtils.toChar(value));
- } else if (type == boolean.class) {
- field.set(t, BooleanUtils.toBoolean(value));
- } else if (type == BigDecimal.class) {
- field.set(t, new BigDecimal(value));
- }
- } else if (type == Boolean.class) {
- field.set(t, BooleanUtils.toBoolean(value));
- } else if (type == Date.class) {
- field.set(t, value);
- } else if (type == String.class) {
- field.set(t, value);
- } else {
- Constructor<?> constructor = type.getConstructor(String.class);
- field.set(t, constructor.newInstance(value));
- }
- }
-
- private static String getCellValue(Cell cell) {
- if (cell == null) {
- return "";
- }else{
- return StringUtils.trimToEmpty(cell.getStringCellValue());
- }
- /* if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- return HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
- } else {
- return new BigDecimal(cell.getNumericCellValue()).toString();
- }
- } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
- return StringUtils.trimToEmpty(cell.getStringCellValue());
- } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
- return StringUtils.trimToEmpty(cell.getCellFormula());
- } else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
- return "";
- } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
- return String.valueOf(cell.getBooleanCellValue());
- } else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {
- return "ERROR";
- } else {
- return cell.toString().trim();
- }*/
- }
-
- /* public static <T> void writeExcel(HttpServletResponse response, List<T> dataList, Class<T> cls, String fileName) {
- Field[] fields = cls.getDeclaredFields();
- List<Field> fieldList = Arrays.stream(fields)
- .filter(field -> {
- ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
- if (annotation != null && annotation.col() > 0) {
- field.setAccessible(true);
- return true;
- }
- return false;
- }).sorted(Comparator.comparing(field -> {
- int col = 0;
- ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
- if (annotation != null) {
- col = annotation.col();
- }
- return col;
- })).collect(Collectors.toList());
-
- Workbook wb = new XSSFWorkbook();
- Sheet sheet = wb.createSheet("Sheet1");
- AtomicInteger ai = new AtomicInteger();
- {
- Row row = sheet.createRow(ai.getAndIncrement());
- AtomicInteger aj = new AtomicInteger();
- //鍐欏叆澶撮儴
- fieldList.forEach(field -> {
- ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
- String columnName = "";
- if (annotation != null) {
- columnName = annotation.value();
- }
- Cell cell = row.createCell(aj.getAndIncrement());
- CellStyle cellStyle = wb.createCellStyle();
- cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
- Font font = wb.createFont();
- cellStyle.setFont(font);
- cell.setCellStyle(cellStyle);
- cell.setCellValue(columnName);
- });
- }
- if (CollectionUtils.isNotEmpty(dataList)) {
- dataList.forEach(t -> {
- Row row1 = sheet.createRow(ai.getAndIncrement());
- AtomicInteger aj = new AtomicInteger();
- fieldList.forEach(field -> {
- Class<?> type = field.getType();
- Object value = "";
- try {
- value = field.get(t);
- } catch (Exception e) {
- e.printStackTrace();
- }
- Cell cell = row1.createCell(aj.getAndIncrement());
- if (value != null) {
- if (type == Date.class) {
- cell.setCellValue(value.toString());
- } else {
- cell.setCellValue(value.toString());
- }
- cell.setCellValue(value.toString());
- }
- });
- });
- }
- //鍐荤粨绐楁牸
- wb.getSheet("Sheet1").createFreezePane(0, 1, 0, 1);
- //娴忚鍣ㄤ笅杞絜xcel
- buildExcelDocument(fileName, wb, response);
- }*/
-
- /**
- * 娴忚鍣ㄤ笅杞絜xcel
- *
- * @param fileName
- * @param wb
- * @param response
- */
-/*
- private static void buildExcelDocument(String fileName, Workbook wb, HttpServletResponse response) {
- try {
- response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
- response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
- response.flushBuffer();
- wb.write(response.getOutputStream());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }*/
-
- /**
- * 鐢熸垚excel鏂囦欢
- *
- * @param path 鐢熸垚excel璺緞
- * @param wb
- */
- /* private static void buildExcelFile(String path, Workbook wb) {
- File file = new File(path);
- if (file.exists()) {
- file.delete();
- }
- try {
- wb.write(new FileOutputStream(file));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }*/
}
--
Gitblit v1.9.3