日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【造轮子】打造一个简单的万能Excel读写工具

發布時間:2025/4/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【造轮子】打造一个简单的万能Excel读写工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家工作或者平時是不是經常遇到要讀寫一些簡單格式的Excel?

shit!~很蛋疼,因為之前吹牛,就搞了個這東西,還算是挺實用,和大家分享下。

厭煩了每次搞簡單類型的Excel讀寫?不怕~來,喜歡流式操作?來~,喜歡用lambda(雖然java的比較蛋疼~),來~看這個~

哈哈,如果你用的不是java8~~沒問題,那就默默地用老方式匿名類來實現這些功能吧,但是這并不妨礙您的使用哈哈~~~

更新多次~希望大家也能夠集思廣益~

github地址:https://github.com/MatrixSeven/ExcelReads

歡迎大家fork,歡迎大家Star,更歡迎大家多提意見or建議,提供更好的想法~~

ExcelReads(簡單Excel通用讀寫器)

ExcelReads是什么?

  • 這是一個通用的簡單的Excel讀取器
  • 支持自定義JavaBean實體讀取和HashMap自動讀取
  • 支持自定義擴展
  • 支持自定義Sheet范圍,數據開始行數
  • 支持數據庫查詢直接導出Excel(Map/Object)
  • 支持正則過濾數據格式
  • JavaBean實體支持使用注解添加正則規則校驗,HashMap支持數組規則校驗
  • 依賴POI,使用Maven構建

更新紀錄

更新2017/01/05

  • 修復據庫查詢的導出(Object)遞歸越棧問題
  • 增加新的xxx.Class定義類型導出,操作更簡單
  • 導出注解支持(自己使用seven.savewapper.anno.ExcelAnno類型注解)

更新2017/01/04

  • 修復據庫查詢的導出(Map)空指針&下標越界問題
  • 修復在Filter數據后出現空行問題
  • 丟入Result參數后的操作就如同操作Map/Object一樣

更新2017/01/01

  • 增加ResExprotDBMap&ResExprotDBObj用于支持數據庫導出
  • 支持基于數據庫查詢的導出(Map),直接放入Result對象即可
  • 支持基于數據庫查詢的導出(Object),直接放入Result對象即可

更新2016/11/30

  • 增加了簡單類型得寫入,生成xls/xlsx
  • 直接JavaBean類型寫入,注解命名
  • 支持Map key-value類型寫入
  • 寫入時支持和讀取一樣得過濾加工排序等寫法

更新2016/11/29

  • 增加CreateMap By Key
  • 去除無用泛型
  • 增加xlsx支持

更新2016/11/8

  • 支持數據過濾和處理是轉換,基于事件模式
  • 更新為Build模式創建實例
  • 增加數據過濾、數據轉換和數據排序回調接口
  • 采用鏈式set方式進行

其他

  • 自定義讀取支持出簡單的規范化數據格式,即典型的表頭格式
  • 可以繼承 WapperMap 和 WapperObj進行擴展
  • 直接使用ExcelFactory.getBeans進行獲取,WapperObj則自己添加泛型
  • 注解Value對應列標題,Required對應正則,可自己寫正則表達式或者直接使用RegHelper
  • 實體bean數據要比hashMap慢,7w條數據慢800ms,加入正則減慢速度(測試中加入了正則)

使用方法說明

  • 本程序只能讀取簡單格式的xls文件,文件布局如下(標準的行列結構):
  • 標題1標題2標題3
    foofoofoo
    barbarbar
    bazbazbaz

    數據庫導出自定義Bean類型寫法(xxx.Class類型)

    1 ExcelFactory.saveExcel( 2 UNPOOLED_DATA_SOURCE.getConnection(). 3 prepareStatement("select * FROM users_info limit 1000").executeQuery(), 4 "\u5317\u4eac__Excel.xlsx", 5 AS.class) 6 .FilterCol(() -> new String[]{"updatetime"}) 7 .Filter((AS o) ->o.getA().length() > 3) 8 .Save();

    ?

    數據庫導出自定義Bean類型寫法(自己實現包裝)

    ExcelFactory.saveExcel(UNPOOLED_DATA_SOURCE.getConnection().prepareStatement("select * FROM users_info limit 1000").executeQuery(),"\u5317\u4eac__Excel.xlsx",res -> {AS a = new AS();a.setA(res.getString("name"));return a;}).FilterCol(() -> new String[]{"updatetime"}).Filter((AS o) ->o.getA().length() > 3).Save();

    ?

    數據庫直接導出到Excel例子

    ExcelFactory.saveExcel(UNPOOLED_DATA_SOURCE.getConnection().prepareStatement("select * FROM users_info limit 10000").executeQuery(), "知乎導出Excel.xlsx")//過濾字段.FilterCol(() -> new String[]{"updatetime"})//過濾數據條件.Filter((HashMap<String, String> o) ->o.get("address").equals("\u5317\u4eac")).Save();

    ?

    自定義類型導出到Excel例子

    List<A> aa = new ArrayList<>(); aa.add(new A("a", "b")); aa.add(new A("aa", "bb")); ExcelFactory.saveExcel(aa,System.getProperty("user.dir").concat("\\Save.xlsx"))///這里能夠處理每一行數據.Process((A a) -> a.setA("xxxxxxx"))//過濾列.FilterCol(() -> new String[]{"B"})//根據某個字段來處理數據時候丟棄.Filter((A a) -> a.getA().length() > 1)//排序.Sort((A o1,A o2 ) -> o1.getAge()>o2.getAge()?1:o1.getAge()==o2.getAge()?0:-1).Save();

    ?

    讀取Excel到Map例子

    1 List<Map<String,String>> data=ExcelFactory.getBeans(System.getProperty("user.dir").concat("\\測試.xls"), 2 new ResWrapperMap() { 3 @Override//配置Excel屬性 4 protected void LoadConfig(Config config) { 5 config.setContent_row_start(3); 6 config.setTitle_row(2); 7 } 8 }).//這里能夠處理每一行數據 9 Process((HashMap<String, String> o) -> System.out.println(o + "\n") 10 //這里能夠處理時候過濾某一列 11 ).FilterCol(() -> new String[]{} 12 //這里能根據某一行的某一列的內容來取舍這行數據 13 ).Filter((HashMap<String, String> o) -> o.get("創建人") != null && o.get("創建人").length() > 5 14 //排序 15 ).Sort((o1, o2) -> o1.hashCode()>o2.hashCode()?1:hashCode()==o2.hashCode()?0:-1).Create(); 16 17 //使用 .CreateMap(key_v) 生成Map<Key,Map>類型數據

    ?

    讀取Excel到自定義類型的例子

    1 Map<String,Seven> map=new ResWrapperObj(Seven) { 2 @Override 3 protected void LoadConfig(Config config) { 4 config.setContent_row_start(3); 5 config.setTitle_row(2); 6 } 7 }). 8 Process((HashMap<String, String> o) -> {} 9 ).FilterCol(() -> new String[]{} 10 ).Filter((HashMap<String, String> o) -> o.get("創建人") != 11 null &&o.get("創建人").length() > 4).<Map>CreateMap("創建人"));

    ?

    ?

    • 郵件(hacker.kill07@gmail.com)
    • QQ: 985390927
    • weibo:?@Alden_情緒控
    • Blog:?http://sweets.cf

    轉載于:https://www.cnblogs.com/seven007/p/6252403.html

    總結

    以上是生活随笔為你收集整理的【造轮子】打造一个简单的万能Excel读写工具的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。