目录
效果图
一、工具类ExcelUtil2【ExcelUtil2不会重名若依自己的ExcelUtil】
二、使用示例
controller
service
serviceImpl
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.*;
public class ExcelUtil2 {
private static final Logger log = LoggerFactory.getLogger(ExcelUtil2.class);
public Class clazz;
private String sheetName;
private Workbook workbook;
private Sheet sheet;
private Map styles;
private List list;
private List
/**
* 导出数据模版
*/
@PreAuthorize("@ss.hasPermi('project:test:query')")
@Log(title = "测试数据", businessType = BusinessType.EXPORT)
@PostMapping("/exportTemplate")
public void exportTemplate(HttpServletResponse response) throws Exception {
自己的Service.exportTemplate(response);
}
/**
* 导出数据模版
*/
void exportTemplate(HttpServletResponse response) throws IOException;
public void exportTemplate(HttpServletResponse response) throws Exception {
// 1. 获取所有下拉列表
List list1 = 获取列表1方法();
List list2 = 获取列表2方法();
// 2. 创建一个空的列表,用于导出模板
List list = new ArrayList<>();
// 3. 创建 ExcelUtil2 实例
ExcelUtil2 util = new ExcelUtil2<>(SysRencaiVo3.class);
// 4. 导出 Excel 并获取工作簿对象
Workbook workbook = util.exportExcel(list, "数据模版");
// 5. 获取第一个工作表
Sheet sheet = workbook.getSheetAt(0);
// 6. 设置标题列宽为 15
// 假设有 2列
for (int i = 0; i < 2; i++) {
// 列宽单位为 1/256 字符宽度
sheet.setColumnWidth(i, 12 * 256);
}
// 7. 设置标题样式(黑体、背景色、字体颜色、加粗、水平垂直居中、自动换行)
// 获取标题行
Row headerRow = sheet.getRow(0);
CellStyle headerStyle = workbook.createCellStyle();
// 水平居中
headerStyle.setAlignment(HorizontalAlignment.CENTER);
// 垂直居中
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 自动换行
headerStyle.setWrapText(true);
// 设置背景色为 #7E7E7E(灰色)
headerStyle.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
// 填充模式为纯色
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 设置字体(黑体、白色、加粗)
Font headerFont = workbook.createFont();
// 字体为黑体
headerFont.setFontName("黑体");
// 字体颜色为白色
headerFont.setColor(IndexedColors.WHITE.getIndex());
// 字体加粗
headerFont.setBold(true);
headerStyle.setFont(headerFont);
// 设置上下左右边外边框
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
// 上下左右外边框颜色
headerStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
headerStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
headerStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
headerStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
// 应用样式到标题行
for (Cell cell : headerRow) {
cell.setCellStyle(headerStyle);
}
// 8. 设置数据验证(下拉框)
DataValidationHelper validationHelper = sheet.getDataValidationHelper();
// 8.1 设置“姓名”下拉框,第1列(索引0),从第2行到第3000行
ExcelUtil2.setDropdownValidation(sheet, validationHelper, list1, 0, 1, 3000);
// 8.2 设置“学校”下拉框,第2列(索引1),从第2行到第3000行
ExcelUtil2.setDropdownValidation(sheet, validationHelper, list2, 1, 1, 3000);
// 9. 输出 Excel 文件
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=template.xlsx");
workbook.write(response.getOutputStream());
workbook.close();
}