poi 使用反射技术导出Excel表格 替换第二版

    技术2022-07-11  122

    话不多说 上java代码

    @SpringBootTest(classes = {ShujiegouApplication.class}) @RunWith(SpringJUnit4ClassRunner.class) public class PoiTestDataBaseNoTwo { @Autowired private SysColumnService sysColumnService; @Test public void test1() throws Exception{ /** * 获取数据库中的数据 填充在Excel表格中 * @throws Exception */ // 准备数据 List<String> titles = Arrays.asList("栏目Id","栏目名称","栏目父id值","菜单级别","跳转页面"); // 数据查询 上师全部的数据 List<SysColumn> sysColumnAll = sysColumnService.getSysColumnAll(); // List<SysColumn> sysColumnAll = sysColumnMapper.selectAll(); // 1. 新建一个HSSFWorkbook 对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 单元格样式对象 设置样式 HSSFCellStyle cellStyle = workbook.createCellStyle(); HSSFFont font = workbook.createFont(); font.setColor((short)10); font.setFontName("宋体"); cellStyle.setFont(font); // 2. 新建一个HSSFSheet对象 HSSFSheet sheet = workbook.createSheet("guru"); // 3. 写入标题栏数据 // 创建行 HSSFRow titleRow = sheet.createRow(0); for (int i = 0; i < titles.size(); i++) { // 创建单元格 HSSFCell titleCell = titleRow.createCell(i); // 添加样式 titleCell.setCellStyle(cellStyle); // 写入数据 titleCell.setCellValue(titles.get(i)); } // 4. 写入上师数据 for (int i = 0; i < sysColumnAll.size(); i++) { SysColumn sysColumn = sysColumnAll.get(i); // 创建行 HSSFRow row = sheet.createRow(i + 1); // 创建单元格 // 反射开始 Class<? extends SysColumn> sysColumnClass = sysColumn.getClass(); // 10.2 获取属性数组 Field[] declaredFields = sysColumnClass.getDeclaredFields(); // 10.3遍历数组 for (int j = 0; j < declaredFields.length; j++) { // 10.4 获取属性名 String guruField = declaredFields[j].getName(); // 10.5 拼接出来get方法名 String guruGetMethod = "get"+guruField.substring(0,1).toUpperCase()+guruField.substring(1); // 10.6 调用get方法获取返回值 Object invoke = sysColumnClass.getDeclaredMethod(guruGetMethod, null).invoke(sysColumn, null); // 10.7创建单元格 HSSFCell cell = row.createCell(j); // 10.8把返回值写入单元格中 // 根据实际业务需求酌情添加 类型判断 // if(invoke instanceof Date){ // 根据实际业务需求酌情添加 类型判断 // } cell.setCellValue(invoke.toString()); } } // 5. 输出 workbook.write(new FileOutputStream(new File("E://gurua.xls"))); } }

    效果图

    这里讲一下为什么要使用反射。 因为在导出的时候,如果不使用反射,如果你的类里有100个属性,那么你需要调用100次set方法进行给单元格赋值。 所以说为了方便,需要使用反射的技术。

    这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!

    欢迎加入技术群聊!

    Processed: 0.009, SQL: 9