顯示具有 NPOI 標籤的文章。 顯示所有文章
顯示具有 NPOI 標籤的文章。 顯示所有文章

2011年2月11日

[NPOI] 輕鬆地將 GridView 匯出成試算表-修正版

之前坎尼有發佈一版 Web User Control,讓 GridView 可以輕鬆匯出成 Excel
(詳見 [NPOI] 輕鬆地將 GridView 匯出成試算表)

後來有讀者發信來問:「為什麼他匯出的檔案標題列都是空白?」
經一番追查之後發現,原來是 GridView 啟用了排序 (AllowSorting)
HeaderText 會自動轉換成 LinkButton
以至於原本抓取標題部分的程式碼只抓到空白文字

於是坎尼稍做了一下修改,如下圖紅框所示
ec_01 
可以看到,不論標題是否可排序
新版本的 Web User Control 仍可以抓取標題文字
ec_02 
ec_03 

請有需求的讀者到 這邊 下載

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)

參考資料:

2010年12月11日

[NPOI] 輕鬆地將 GridView 匯出成試算表

相信大家都遇過要將資料匯出成 Excel 的問題
這次坎尼用 NPOI 製作匯出用的 WebUserControl
如果以後有相同需求,不介意就直接拿去用吧 :D

I. 實作過程

首先,建立一個 WebUserControl
在畫面上加入按鈕,用來觸發匯出事件 nec_01
接著建立兩個屬性:TargetGridViewIDSheetName
TargetGridViewID 用來指定要匯出的 GridView
SheetName 則是匯出的試算表名稱 nec_02
進入按鈕事件,這邊唯一要做的事,就是去找引用頁面的 GridView
找到之後丟給 ExportToFile 這個 method 就沒事了 (十分輕鬆)nec_03接著到 ExportToFile(GridView gv)
這邊可參考 NPOI 建立試算表的方法,不再多提
要注意的就是抓取 GridView 欄位數時,不用要 Columns.Count
而是改用 HeaderRow.Cell.Count nec_04 大功告成,其他部分的 Code 有興趣的話可以到這邊下載

II. 測試

建立一個測試頁面,把剛做好熱騰騰的 WebUserControl 放上去
接著再加入 GridView 及設定其繫結事件
設定 UserControl 的 TargetGridViewID 及 SheetName 屬性 nec_05 執行測試頁面,點下匯出之後即會把資料轉換成試算表 nec_06
怎樣,是不是很簡單呢?

III. 小結

這次只陽春地做出了匯出功能
使用上也限制了 GridView 不能啟動分頁

如果要加入自定樣式或是分頁也可以匯出的功能
可將 Source Code下載回去自行修改
坎尼有空再來擴充這個 UserControl 的功能 : )

2011/02/11 修改:User Control 已有新版本,請前往 連結 下載新的檔案

2010年3月13日

[輕鬆學會 Chart Control] 將圖表匯出至 Excel - 使用NPOI

好久沒開 Chart Control 議題了
剛好前陣子 Codeplex 出現可以輕鬆建立 Excel 檔案的 Library-NPOI
於是坎尼想說研究一下,看能不能把 Chart Control 匯出圖片到 Excel 中
沒想到只花了不到1小時就研究出來了,真的是很簡單 :D

I.準備

首先是下載 NPOI Library,並將它加入至專案中
其他相關說明可以參考 MSDN 上的文章
在 Server 端存取 Excel 檔案的利器:NPOI Library

坎尼這邊就不多話,直接進入今天主題

II.範例

首先開啟一個 Web 專案,把 NPOI 的 Library 加入專案中
建立一個 Web page,在畫面上放入一個 Chart Control
另外再放個 Gridview 來呈現資料 ,最後建立 Button 來觸發匯出的事件
nwc01 將畫面切換到 .cs 檔裡
引用這次範例中會用的兩個 Namespace:
NPOI.HSSF.UserModel – 建立 Excel 內容
NPOI.HSSF.Util - 建立相關樣式屬性

nwc00 
接著到匯出按鈕事件,建立 workbook 部分也跳過 (那不就什麼都沒講嗎? 毆
nwc03上面的 Code 就不詳細說明,主要是將 Chart 存成 Stream
再利用 NPOI 提供圖片插入方法,把 Stream 轉為 Excel 可讀取的圖片格式
(注意圖片的匯出格式以及匯入格式)
最後再將整個 workbook 匯出即可 (見下圖)
nwc02 資料部分坎尼本來還想加上樣式,後來覺得有點麻煩就作罷 (喂!

III.結論

NPOI 真的是很好用的 Library,建議有需求的人都可以去下載來試玩看看

本次範例 下載

參考資料:
NPOI Codeplex
在 Server 端存取 Excel 檔案的利器:NPOI Library
用 NPOI 操作EXCEL--插入圖片

Google Spreadsheet 裡用規則運算式

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