<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          幾行代碼就能實現(xiàn)復雜的 Excel 導入導出,這個工具類真心強大!

          共 7585字,需瀏覽 16分鐘

           ·

          2022-06-28 01:20

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
          關(guān)注


          閱讀本文大概需要 4 分鐘。

          來自:blog.csdn.net/weixin_43225813/article/details/108995011

          功能介紹

          IMPORT

          • ExcelHandle 核心處理器

          • ExcelWorkbookManage excel所有工作表管理

          • ExcelInitConfig 配置文件初始化

          • AbstractFileParser 文件轉(zhuǎn)換類

          alanpoi import有何優(yōu)勢?

          • 用戶不需要額外引入poi等繁瑣的jar
          • 毫秒級解析大文件,支持一鍵解析多sheet頁簽,不需要自己按照一定的格式循環(huán)匹配解析所有數(shù)據(jù)
          • 不管你的系統(tǒng)多么復雜,有多少個導入,alanpoi全部支持,而且準確返回你需要的對象,減輕開發(fā)者工作量
          • 目前外界業(yè)務越來越復雜,對各個功能要求也越來越嚴格,當然導入也不例外,alanpoi支持錯誤一鍵回寫到excel,對應到每一行
          • alanpoi靈活可擴展,提供了ExcelConsumeInterface接口,可繼承它,實現(xiàn)valid、error、end三個方法編寫自己的業(yè)務
            • valid: 方法參數(shù)返回excel所有數(shù)據(jù),用戶可進行自我校驗
            • error: 導入錯誤會回調(diào)
            • end: 方法參數(shù)返回校驗成功的數(shù)據(jù),valid校驗失敗的數(shù)據(jù)不會返回,用戶可以自己操作持久化或者其他業(yè)務

          怎么使用alanpoi實現(xiàn)導入

          項目中使用:
          <dependency>
              <groupId>com.alanpoi</groupId>
              <artifactId>alanpoi-analysis</artifactId>
              <version>1.3.0</version>
          </dependency>
          簡單一句話:一配置一繼承一調(diào)用

          一配置

          在項目resources目錄中新建excel-config.xml文件,cosume中配置自己的消費類路徑,繼承ExcelConsumeInterface接口,sheet中的vo是把當前sheet序列化的對象路徑,column中當然就是配置vo中的屬性了。
          其中name可選字段,填了就是按照這個匹配excel列名,不填就是按照offset順序;導入包含多個sheet就配置多個
          <?xml version = "1.0" encoding = "GB2312"?>
          <exg name="excelId" version="1.0" file-type="excel">
            <excel id="ACCOUNT" consume="com.xxx.FinAccountImportHandler">
               <sheet index="0" row-start="1" column-start="0"
                      vo="com.xxx.vo.FinAccountImportVO">

                   <column name="公司/供應商編號" offset="1">companyCode</column>
                   <column name="公司/供應商名稱" offset="2">companyName</column>
                   <column name="銀行賬號" offset="3">bankAccount</column>
                   <column name="開戶銀行" offset="4">bankName</column>
               </sheet>
           </excel>
          </exg>

          一繼承

          consume類繼承ExcelConsumeInterface接口,實現(xiàn)方法
          /**
           * when error will 調(diào)用
           *
           * @param excelError
           */

          void error(ExcelError excelError);

          /**
           * custom valid data
           *
           * @param workbookId
           * @param sheetDataList
           */

          void validData(String workbookId, List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);

          /**
           * @param sheetDataList return success data
           */

          void end(List<ExcelSheetData> sheetDataList, Map<Serializable, Object> excelParam);

          一調(diào)用

          用戶調(diào)用ExcelExportUtil類的customImportData即可,參數(shù)excelId就是excel-conifg.xml中配置的id

          Export

          描敘

          能夠用一行代碼實現(xiàn)絕不用第二行,如果一行不行,那就再加一行!

          模式

          注解模式導出:
          • ExcelSheet注解: 用于導入類上,可制定sheet名,列頭的顏色、字體、高度、寬度

          • ExcelColum注解: 用于導入類的屬性上,可指定列頭的名稱,單元格的樣式

          • DateFormat注解: 用于導入類的屬性上, 可以按照指定格式輸出到excel,默認"yyyy/MM/dd"

          • NumFormat注解: 用于導入類的屬性上,可以按照指定格式輸出到excel,默認"00.00"

          樣例:
          @ExcelSheet(name = "測試", backColor = AlanColors.GREEN, font = "宋體", fontSize = 25)
          @Data
          public class ExportVO {
              @ExcelColumn(name = "名稱", width = 32, link = "${url}")
              private String name;

              @ExcelColumn(name = "值")
              private String value;

              @ExcelColumn(name = "金額")
              @NumFormat(value = "0000.00##")
              private BigDecimal amount;

              @ExcelColumn(name = "時間格式化")
              @DateFormat(value = "yyyy-MM-dd hh:mm:ss")
              private Date dateTime;

              @DateFormat
              @ExcelColumn(name = "日期格式化")
              private java.sql.Date date;
              
              @ExcelColumn(isExist = false)
              private String url;
          }

          使用

          方式一. 直接導出到瀏覽器
          ExcelExportUtil.export(Colletion<?>,Class,HttpServletRequest,HttpServletResponse,fileName);
          方式二. 調(diào)用getWorkbook獲取工作表,自行處理workbook
          ExcelExportUtil.getWorkbook(Collection<?> singleSheetData, Class<?> c)

          高級使用

          示例一:導出指定列(動態(tài)導出列)
          List<ExportVO> list = new ArrayList<>();
          for (int i = 0; i < 500; i++) {
              ExportVO exportVO = new ExportVO();
              exportVO.setName("name" + i);
              exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
              exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
              exportVO.setDate(new Date(132324343 + i * 100));
              exportVO.setDateTime(new java.util.Date());
              list.add(exportVO);
          }
          List<String> colList = new ArrayList<>();
          //按照順序僅導出add的列
          colList.add("name");
          colList.add("value");
          //調(diào)用獲取workbook對象;也可以直接調(diào)用exportSpecifyCol方法導出到瀏覽器
          Workbook workbook = ExcelExportUtil.getWorkbookSpecifyCol(list, ExportVO.classcolList);
          示例二:多sheet頁簽導出
          List<ExportVO> list = new ArrayList<>();
          List<Export2VO> list2 = new ArrayList<>();
          for (int i = 0; i < 500; i++) {
              ExportVO exportVO = new ExportVO();
              exportVO.setName("name" + i);
              exportVO.setValue(new BigDecimal(123.11 + i * 0.09));
              exportVO.setAmount(new BigDecimal(6666.666 + i * 10));
              exportVO.setDate(new Date(132324343 + i * 100));
              exportVO.setDateTime(new java.util.Date());
              list.add(exportVO);
              Export2VO export2VO = new Export2VO();
              export2VO.setName("name" + i);
              export2VO.setValue("value" + i);
              export2VO.setAmount(new BigDecimal(6666.666 + i * 10));
              export2VO.setDate(new Date(132324343 + i * 100));
              export2VO.setDateTime(new java.util.Date());
              list2.add(export2VO);
          }
          Map<Class<?>, Collection<?>> map = new HashMap<>();
          map.put(ExportVO.classlist);
          map.put(Export2VO.classlist2);
          //調(diào)用獲取workbook對象;也可以直接調(diào)用exportByMultiSheet方法導出到瀏覽器
          Workbook workbook = ExcelExportUtil.getWorkbookByMultiSheet(map);
          代碼已經(jīng)開源,地址:
          https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis
          <END>

          推薦閱讀:

          換掉UUID,NanoID更快更安全!

          如何將 @Transactional 事務注解運用到爐火純青?

          互聯(lián)網(wǎng)初中高級大廠面試題(9個G)

          內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper......等技術(shù)棧!

          ?戳閱讀原文領(lǐng)取!                                  朕已閱 

          瀏覽 15
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  地址一地址二日本视频免费 | а√天堂资源在线 | 青青草在线激情视频 | 成人无码区免费A片在线软件 | 色五月欧美 |