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

话不多说 上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方法进行给单元格赋值。
所以说为了方便,需要使用反射的技术。

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

欢迎加入技术群聊!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/taiguolaotu/article/details/107060091