refactor(workBook): 重构 WorkBookController 并添加通用导出工具类
- 将 WorkBookController 重构为 RestController - 新增 WorkBookResponseUtils 工具类,用于通用的 Excel导出功能 - 优化导入导出逻辑,支持任意对象列表的导出 - 添加单元格值设置异常处理
This commit is contained in:
parent
2b3f4c8995
commit
f37f1dd4b3
@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
@ -17,8 +18,10 @@ import org.springframework.stereotype.Controller;
|
|||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -29,9 +32,13 @@ import java.util.List;
|
|||||||
* @Date 2024/11/20 16:35
|
* @Date 2024/11/20 16:35
|
||||||
* @注释
|
* @注释
|
||||||
*/
|
*/
|
||||||
@Controller
|
@RestController
|
||||||
@RequestMapping("/workBook")
|
@RequestMapping("/workBook")
|
||||||
public class WorkBookController {
|
public class WorkBookController {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@GetMapping(value = "/exportUser")
|
@GetMapping(value = "/exportUser")
|
||||||
public void export(HttpServletResponse response) throws UnsupportedEncodingException {
|
public void export(HttpServletResponse response) throws UnsupportedEncodingException {
|
||||||
// WorkBook
|
// WorkBook
|
||||||
|
@ -0,0 +1,85 @@
|
|||||||
|
package cn.whaifree.springdemo.controller.workBook.export;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
|
import cn.hutool.core.util.ReflectUtil;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/11/22 16:56
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class WorkBookResponseUtils {
|
||||||
|
|
||||||
|
public static void setHead(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {
|
||||||
|
// WorkBook
|
||||||
|
fileName = Optional.ofNullable(fileName).orElse("workBook.xlsx");
|
||||||
|
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder
|
||||||
|
.encode(fileName, StandardCharsets.UTF_8));
|
||||||
|
response.setContentType("application/vnd.ms-excel;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Workbook getWorkBook(List<?> list, Class<?> clazz, HttpServletResponse response, String fileName) {
|
||||||
|
try {
|
||||||
|
setHead(response, fileName);
|
||||||
|
return getWorkBook(list, clazz);
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Workbook getWorkBook(List<?> list, Class<?> clazz) {
|
||||||
|
try (InputStream inputStream = ExportAutoController.class.getClassLoader().getResourceAsStream("template/empty.xlsx")) {
|
||||||
|
Workbook workbook = new XSSFWorkbook(inputStream);
|
||||||
|
Sheet sheetAt = workbook.getSheetAt(0);
|
||||||
|
Field[] fields = ReflectUtil.getFields(clazz);
|
||||||
|
Row row = sheetAt.getRow(0);
|
||||||
|
if (row == null) {
|
||||||
|
row = sheetAt.createRow(0);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < fields.length; i++) {
|
||||||
|
Cell cell = row.createCell(i);
|
||||||
|
cell.setCellValue(fields[i].getName());
|
||||||
|
}
|
||||||
|
int length = fields.length; // 列数
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
Object o = list.get(i);
|
||||||
|
row = sheetAt.createRow(i + 1);
|
||||||
|
for (int j = 0; j < length; j++) {
|
||||||
|
Cell cell = row.createCell(j);
|
||||||
|
Field field = fields[j];
|
||||||
|
field.setAccessible(true);
|
||||||
|
try {
|
||||||
|
Object value = field.get(o); // 获取字段值
|
||||||
|
if (value != null) {
|
||||||
|
cell.setCellValue(value.toString()); // 将字段值设置到单元格中
|
||||||
|
}
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return workbook;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user