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方法進行給單元格賦值。
所以說爲了方便,需要使用反射的技術。

這輩子堅持與不堅持都不可怕,怕的是獨自走在堅持的道路上!

歡迎加入技術羣聊!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章