首頁

2013年6月23日 星期日

**EXCEL*轉Data Table的NPOI簡單範例**~**

**EXCEL*Data TableNPOI~
**簡單範例**~**
**開始改用NPOI來處理Excel檔案的讀寫輸出,
感覺上比Excel DOM、OLE DB for JET、
甚至CSV法來得穩定輕巧,而NPOI功能的齊全--
--程度更是讓我驚喜連連**


**以下為使用NPOI讀取表格EXCEL檔,
自動轉成Data Table的簡單範例:**
**
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
 
public class NPOIHelper
{
    public static DataTable 
ReadExcelAsTableNPOI(string fileName)
    {
        using (FileStream fs =
 new FileStream(fileName, FileMode.Open))
        {
            HSSFWorkbook wb =
 new HSSFWorkbook(fs);
            Sheet sheet = wb.GetSheetAt(0);
            DataTable table = new DataTable();
            //由第一列取標題做為欄位名稱
            Row headerRow = sheet.GetRow(0);
            int cellCount =
 headerRow.LastCellNum;
            for (int i =
 headerRow.FirstCellNum; i < cellCount; i++)
                //以欄位文字為名新增欄位,
此處全視為字串型別以求簡化
                table.Columns.Add( 
                    new DataColumn
(headerRow.GetCell(i).StringCellValue));
            
            //略過第零列(標題列),一直處理至最後一列
            for (int i =
 (sheet.FirstRowNum + 1);
 i < sheet.LastRowNum; i++)
            { 
                Row row = sheet.GetRow(i);
                if (row == null) continue;
                DataRow dataRow = table.NewRow();
                //依先前取得的欄位數逐一設定欄位內容
                for (int j =
 row.FirstCellNum; j < cellCount; j++)
                    if (row.GetCell(j) != null)
                        //如要針對不同型別做個別處理,
可善用.CellType判斷型別 
                        //再用.StringCellValue
.DateCellValue, .NumericCellValue...取值 
                        //此處只簡單轉成字串 
                        dataRow[j] =
 row.GetCell(j).ToString();
                table.Rows.Add(dataRow);
            } 
            return table;
        } 
    } 
}                                  **
**範例假設Excel第一列視為標題列,讀取各欄位值 
當成DataTable的Column名稱,建立欄位後,
逐一讀取各列的資料新增為Row,其中欄位內容一律視為字串處置**
 
**
排版顯示純文字
<%@ Page Language="C#" %>
<script type="text/C#" runat="server"> 
void Page_Load(object sender, EventArgs e)
{ 
    System.Data.DataTable t =
 NPOIHelper.ReadExcelAsTableNPOI( 
        Server.MapPath("~/App_Data/Koobe.xls"));
    GridView1.DataSource = t;
    GridView1.DataBind();
} 
 
</script> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<body> 
    <form id="form1" runat="server"> 
    <asp:GridView ID="GridView1" runat="server"> 
    </asp:GridView> 
    </form> 
</body> 
</html>                                     **
**補充一點,因為Excel檔案中儲存的是資料的原值加格式、
***或是計算公式內容,並非套用格式及運算後的最終結果**
**故可能與Excel中看到的有點誤差。
如下例中的第一列備註就由2011/5/12變成5/12/11,
在應用時需留意  **
 
****

 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

沒有留言:

張貼留言


if you like make fds, wellcome you here~~anytime***

my free place for everyones who want the good software,

come & download them~ wellcome!!