NPOI 超簡單的導出導入


 

首先說說,第一次遇到過匿名導出的那個時候是在我在北京第一家公司,簡單的聲明一個對象就可以導出,那時候感覺高大上,自己也想研究研究,但是因為頭將代碼后來加密了根本看不到。好吧,研究了研究放棄了,后來,因為個人原因離職了。

然后進入了一個外包公司,有個功能需求是導入,導出Excel的需求,當時不想復制粘貼簡單操作,也因為受到這家公司動態創建實體的代碼上的理解,也不喜歡同事導出時先保存到服務器的邏輯,便用NPOI重寫了一份幫助類。

因為時間太長了,更換了電腦,當時測試的Demo已經沒有了,我分拆出來一個吧。

實現功能:

注:功能目前只支持單Sheet

導入:支持List和DataTable格式,支持數據非空驗證。

導出:支持List和DataTable格式,支持Excel格式,支持匿名類List導出及簡單樣式操作。

定義Excel和實體類及DataTable的對應列實體,此實體主要是用於幫助定義導入導出時的字段對應關系。

及導入是非空驗證,導出時配置簡單樣式等。

下圖是主要類結構圖:

ExcelColumn是單元格的列定義的實體類;

ExCelColumns是列的集合定義列。

ExcelStream 是防止NPOI釋放操作,因為NPOI2開始至今Response到瀏覽器會出現錯誤,后來發現是因為內存釋放導致的。

NPOIExelHelper 是導入導出的調用方法。

clip_image001

clip_image003

clip_image004

clip_image006

幫助類的代碼不貼了,稍后傳上去各位自己下載,因當時開始的考慮與后來的考慮不一致導致代碼有部分重復,沒有做整理,諒解。

兩個導入節點配置,當然你也可以不用配置,那么導入的第一行的單元格直接對應實體類的列或DataTable的表格。

<?xml version="1.0" encoding="utf-8" ?>

<root>

<Inbound>

<!--默認讀取節點-->

<row height="20" title="入庫SN信息" sheetname="sheet1" ignoreerr="false">

<column key="庫房所在地" name="WarehouseName" />

<column key="采購訂單號" name="PurchaseNumber"></column>

<column key="批次編號" name="BatchNumber" required="true"></column>

<column key="CODE" name="Code" required="true"></column>

<column key="序列號" name="SN" required="true"></column>

<column key="Configid/Bom" name="ConfigId"></column>

<column key="產品描述" name="ProductDescription"></column>

<column key="入庫數量" name="Amount"></column>

</row>

</Inbound>

<Outbound>

<row height="50" title="出庫SN信息" sheetname="sheet1" ignoreerr="false">

<column key="庫房所在地" name="WarehouseName" />

<column key="出庫單號" name="OutBoundNumber" required="true"></column>

<column key="合同號" name="ContractNumber"></column>

<column key="CODE" name="Code" required="true"></column>

<column key="序列號" name="SN" required="true"></column>

<column key="Configid/Bom" name="ConfigId"></column>

<column key="產品描述" name="ProductDescription"></column>

<column key="出庫數量" name="Amount"></column>

</row>

</Outbound>

</root>

其中ignoreerr是導入是是否忽略錯誤導入,一般只是否非空驗證錯誤。

required為此列是否非空驗證。

下面我們就做一個導入導出測試。因為本人不喜歡用DataTable,所以DataTable方式不做Demo。但是實體類里面支持Dt導入導出。

首先,聲明實體類:

clip_image007

配置導入導出XML:

clip_image008

導入代碼:

clip_image009

導出代碼:

clip_image011

clip_image013

源碼地址:下載鏈接


免責聲明!

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



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