POI實現excel各種驗證和導入的思路總結


  •    制定標准

       導入總是與導出相輔相成的,無規矩不成方圓。所謂的標准都是大家一同來維護和遵守的,那么首先就是制定一個模板。

       這樣可以減少驗證的工作量。

       例如時間的規范【yyyy-MM-dd】,獲取單元格的時間值用下面的方法

   java.util.Date date= cell.getDateCellValue();

     但是如果用戶不合法輸入,那么將會報IllegalStateException異常,此時我們可以進行錯誤的捕獲和處理

       導入的前提的數據是合法的,因此驗證數據是非常必要的,數據的格式就要大家要遵守了。但是嚴謹而已,還是必須考慮用戶的非法操作。

  •     模板的標識

      每個模板都有對應的標識,不可能隨便什么數據都可以往數據庫表對象中塞的,因此要設計一個標識符用於區分模板。

      標識符必須是唯一的,可以識別的。通常都是指定導入對象的主鍵為標識符。

  •    模板校驗

     如果模板限定了可以編輯區域,那么只是需要驗證標識符即可。但是往往我們需要復制大量的數據,因此不可能設置保護模式,這個時候需要對模板進行格式校驗。

     校驗包括模版格式校驗、數據合法性校驗,數據范圍校驗等等。

     如果各種校驗都用java程序來判斷,那么數據量很大的時候,處理和執行速度會非常的慢。經過幾天研究,發現善於利用oracle的語句可以使效率提高幾十倍,前提

     是數據都放在數據庫中。

     因此,除了簡單的檢驗之后,我們可以將excel的數據放入到數據庫創建的臨時表或者日志表中,進行數據的校驗。

       創建的數據臨時表必須滿足兩個條件,第一是含有模板標識符,第二是有一列指標用於存與excel對應的行數。

   這樣方便返回錯誤詳細信息,告訴用戶哪行哪列數據出現問題。

       下面是幾種簡單的校驗,非常實用:

      @ 檢驗excel的數據是否重復(數據重復的標准是某幾列的值是否相等,即數據唯一標識)

          我們不需要循環excel一一對比,我們完全可以使用oracle函數實現數據重復檢查

          select distinct substr(數據唯一標識列數據) as rn from 數據臨時表 a

          where rowid !=(select max(rowid) from 數據臨時表 b where 數據唯一標識列數據相等

          得到的數據是去除重復的數據,只要小於總條數(excel的行數lastRow),那么就可以知道重復的數據。

     @ 檢驗導入的數據是否已經存在

     select columns from 數據正式表 INTERSECT (select columns from 數據臨時表 where ..);

         只要rs.next(),那么證明存在數據,並且可以獲取到重復的數據。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM