Java 导出下载工具类 - 轻松将数据导出为 Excel 或 CSV 文件
以下是一个简单的 Java 导出下载工具类示例,可以使用它来将数据导出为 Excel 或 CSV 文件并提供下载链接。
public class ExportDownloadUtil {
/**
* 导出数据为 Excel 文件并提供下载链接
* @param response HttpServletResponse 对象
* @param dataList 要导出的数据列表
* @param fileName 导出的文件名
* @param sheetName 导出的工作表名
* @param headers Excel 表头数组
* @param fields 要导出的字段名数组
* @throws IOException
*/
public static void exportExcel(HttpServletResponse response, List<?> dataList, String fileName, String sheetName, String[] headers, String[] fields) throws IOException {
// 创建 Excel 工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet(sheetName);
// 创建表头行
Row headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
}
// 填充数据行
for (int i = 0; i < dataList.size(); i++) {
Row dataRow = sheet.createRow(i + 1);
Object obj = dataList.get(i);
for (int j = 0; j < fields.length; j++) {
try {
String field = fields[j];
Field f = obj.getClass().getDeclaredField(field);
f.setAccessible(true);
Cell cell = dataRow.createCell(j);
Object value = f.get(obj);
if (value != null) {
if (value instanceof Date) {
SimpleDateFormat dateFormat = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss');
cell.setCellValue(dateFormat.format((Date) value));
} else {
cell.setCellValue(value.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 设置响应头
response.setContentType('application/vnd.ms-excel');
response.setHeader('Content-Disposition', 'attachment;filename=' + fileName);
// 将 Excel 数据写入响应输出流
workbook.write(response.getOutputStream());
workbook.close();
}
/**
* 导出数据为 CSV 文件并提供下载链接
* @param response HttpServletResponse 对象
* @param dataList 要导出的数据列表
* @param fileName 导出的文件名
* @param headers CSV 表头数组
* @param fields 要导出的字段名数组
* @throws IOException
*/
public static void exportCsv(HttpServletResponse response, List<?> dataList, String fileName, String[] headers, String[] fields) throws IOException {
// 创建 CSV 数据字符串
StringBuilder sb = new StringBuilder();
// 添加表头
for (int i = 0; i < headers.length; i++) {
sb.append(headers[i]).append(',');
}
sb.append('\n');
// 添加数据
for (int i = 0; i < dataList.size(); i++) {
Object obj = dataList.get(i);
for (int j = 0; j < fields.length; j++) {
try {
String field = fields[j];
Field f = obj.getClass().getDeclaredField(field);
f.setAccessible(true);
Object value = f.get(obj);
if (value != null) {
if (value instanceof Date) {
SimpleDateFormat dateFormat = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss');
sb.append(dateFormat.format((Date) value));
} else {
sb.append(value.toString());
}
}
sb.append(',');
} catch (Exception e) {
e.printStackTrace();
}
}
sb.append('\n');
}
// 设置响应头
response.setContentType('text/csv');
response.setHeader('Content-Disposition', 'attachment;filename=' + fileName);
// 将 CSV 数据写入响应输出流
response.getWriter().write(sb.toString());
}
}
使用示例:
// 导出为 Excel 并提供下载链接
List<User> userList = userService.getUserList();
String[] headers = {'ID', '姓名', '年龄', '性别', '创建时间'};
String[] fields = {'id', 'name', 'age', 'gender', 'createTime'};
ExportDownloadUtil.exportExcel(response, userList, 'userList.xlsx', '用户列表', headers, fields);
// 导出为 CSV 并提供下载链接
List<Order> orderList = orderService.getOrderList();
String[] headers = {'订单号', '商品名称', '数量', '单价', '总价', '下单时间'};
String[] fields = {'orderId', 'productName', 'quantity', 'price', 'totalPrice', 'createTime'};
ExportDownloadUtil.exportCsv(response, orderList, 'orderList.csv', headers, fields);
原文地址: http://www.cveoy.top/t/topic/nZwW 著作权归作者所有。请勿转载和采集!