Asp.net - 匯入為Excel檔 方法

Asp.net - 匯入為Excel檔 方法

在 Server 端存取 Excel 檔案的利器:NPOI Library

可使用 NPOI
http://msdn.microsoft.com/zh-tw/evalcenter/ee818993.aspx



NPOI 函式庫

NPOI 函式庫可以在 http://npoi.codeplex.com 中下載,目前的版本為 1.2.1,有分為 .NET 1.1 與 .NET 2.0 以上版本兩種,支援主要的 POI 專案提供的功能,但專案中的範例程式碼都是以 Excel 為標的,原因應該是 Excel 在伺服器端的處理遠比 Word 和 PowerPoint 等文件要多太多了,故筆者在本篇文章也是以 Excel 檔案為主要說明的標的。
NPOI 函式庫檔案有七個,分別是:
  • NPOI.DLL:NPOI 核心函式庫。
  • NPOI.DDF.DLL:NPOI 繪圖區讀寫函式庫。
  • NPOI.HPSF.DLL:NPOI 文件摘要資訊讀寫函式庫。
  • NPOI.HSSF.DLL:NPOI Excel BIFF 檔案讀寫函式庫。
  • NPOI.Util.DLL:NPOI 工具函式庫。
  • NPOI.POIFS.DLL:NPOI OLE 格式存取函式庫。
  • ICSharpCode.SharpZipLib.DLL:檔案壓縮函式庫。
一般需要存取 Excel 97-2003 格式(.xls)的檔案時,需要使用 NPOI、NPOI.HSSF、NPOI.POIFS 與 NPOI.Util 函式庫,因此專案中要引用這四個 DLL,若要一併存取文件摘要資訊時,則也要引用 NPOI.HPSF.DLL 檔案,以取得必要的類別宣告。開發人員通常只要集中精神在 NPOI.HSSF.UserModel 命名空間即可,它包含了控制 Excel 資料的各式類別物件供開發人員取用。
例如下列的 ASP.NET 程式碼可以生成一個空白的 Excel 檔案,並且添加三個指定名稱的試算表:
[C#]
HSSFWorkbook workbook = new HSSFWorkbook(); 
MemoryStream ms = new MemoryStream(); 
 
// 新增試算表。 
workbook.CreateSheet("試算表 A"); 
workbook.CreateSheet("試算表 B"); 
workbook.CreateSheet("試算表 C"); 
 
workbook.Write(ms); 
Response.AddHeader("Content-Disposition"string.Format("attachment; filename=EmptyWorkbook.xls")); 
Response.BinaryWrite(ms.ToArray()); 
 
workbook = null; 
ms.Close(); 
ms.Dispose();

我們可以在裡面添加資料,例如下列的程式碼:
[C#]
HSSFWorkbook workbook = new HSSFWorkbook(); 
MemoryStream ms = new MemoryStream(); 
 
// 新增試算表。 
HSSFSheet sheet = workbook.CreateSheet("My Sheet"); 
// 插入資料值。 
sheet.CreateRow(0).CreateCell(0).SetCellValue("0"); 
sheet.CreateRow(1).CreateCell(0).SetCellValue("1"); 
sheet.CreateRow(2).CreateCell(0).SetCellValue("2"); 
sheet.CreateRow(3).CreateCell(0).SetCellValue("3"); 
sheet.CreateRow(4).CreateCell(0).SetCellValue("4"); 
sheet.CreateRow(5).CreateCell(0).SetCellValue("5"); 
 
workbook.Write(ms); 
Response.AddHeader("Content-Disposition"string.Format("attachment; filename=EmptyWorkbook.xls")); 
Response.BinaryWrite(ms.ToArray()); 
 
workbook = null; 
ms.Close(); 
ms.Dispose();



那麼輸入呢?當然也沒有問題啦。
利用下列的程式碼:

利用下列的程式碼:
[C#]
if (this.fuUpload.HasFile) 
{ 
    HSSFWorkbook workbook = new HSSFWorkbook(this.fuUpload.FileContent); 
    HSSFSheet sheet = workbook.GetSheetAt(0); 
 
    DataTable table = new DataTable(); 
 
    HSSFRow headerRow = sheet.GetRow(0); 
    int cellCount = headerRow.LastCellNum; 
 
    for (int i = headerRow.FirstCellNum; i < cellCount; i++) 
    { 
        DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); 
        table.Columns.Add(column); 
    } 
 
    int rowCount = sheet.LastRowNum; 
 
    for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++) 
    { 
        HSSFRow row = sheet.GetRow(i); 
        DataRow dataRow = table.NewRow(); 
 
        for (int j = row.FirstCellNum; j < cellCount; j++) 
        { 
            if (row.GetCell(j) != null) 
                dataRow[j] = row.GetCell(j).ToString(); 
        } 
 
        table.Rows.Add(dataRow); 
    } 
 
    workbook = null; 
    sheet = null; 
 
    this.gvExcel.DataSource = table; 
    this.gvExcel.DataBind(); 
}

張貼留言

0 留言