2010年12月18日

[NPOI] Excel 上傳用 User Control

上篇坎尼寫了 [NPOI] 輕鬆地將 GridView 匯出成試算表
坎尼的朋友就問:那有沒有上傳的?
當然有,要什麼有什麼 :D
nic_00x

I. 實作過程

首先,建立一個 WebUserControl
加入一個 FileUpload、兩個 Button、一個 GridView

  • FileUpload上傳按鈕用來進行檔案上傳的動作
  • 確認按鈕則是給使用者自行定義事件
  • GridView 用來顯示上傳完成的檔案

nic_01


建立委派事件

接著建立 User 可以委派的事件:ImportToDB
nic_02 
確認按鈕的 Click 事件則去呼叫 User 的委派事件
nic_03 


建立屬性

建立上傳資料屬性,以利使用者進行後續的資料匯入動作
nic_04 
由於 PostBack 之後不會記住屬性的資料
所以用 ViewState 把資料記住,並在 Page_Load 事件檢查
nic_05


上傳按鈕事件

  • 第一個紅框為呼叫 NPOI 上傳事件
    把 Excel 內容傳到 DataTable 之中並回傳
  • 第二個紅框為將資料存到 ViewState 之中
    另外把確認按鈕改成可作用
  • 第三個紅框則是把資料顯示到畫面上
nic_06

NPOI 匯入事件

這邊的程式碼引用 hunterpo 大所寫的 利用 NPOI Library 合併多個 Excel 檔
但要注意的一點是,1.2.3 版本的 NPOI 在以下紅框處需進行轉型的動作nic_07

II. 使用方法

建立新的頁面,把 User Control 放到畫面上
另外再加入一個 GridView,用來確認資料是否真的上傳到 server
nic_08

自行撰寫事件

這邊可以看到坎尼自己定義了新的事件:ImportToDB
nic_09 
動作只是很簡單地判斷 UserControl 的 DataTable 有沒有資料
有的話就把資料繫結到畫面上的 GridView 之中
nic_10

執行畫面

上傳資料,成功的話 UserControl 會將資料顯示出來
nic_11 點下確認之後,使用者自行定義的事件會把資料繫結到另一個 GridView
nic_12 大功告成!!!

III. 小結

本次範例是用 NPOI 1.2.3 寫的 (上一篇是用舊版)
所以還沒用此版本的讀者記得去 codeplex 下載新版本

另外上傳的 Excel 檔案需為 97-2003 的格式
若是用 office 2007 或是 office 2010 的朋友,記得改存為舊格式

此次的範例下載 (含 npoi library)

參考資料:

2 則留言:

dorabb 提到...

大哥! 你的範例檔案連結失效了.

坎尼 提到...

已補上新連結 :)

之前使用網頁空間失效了,如果還有發現連結消失的情形,歡迎來信告知 :D

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D