程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> NPOI 超簡單的導出導入,npoi導出導入

NPOI 超簡單的導出導入,npoi導出導入

編輯:C#入門知識

NPOI 超簡單的導出導入,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

源碼地址:下載鏈接

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved