asp.net mvc4使用NPOI 資料處理之快速匯出Excel文檔

來源:互聯網
上載者:User

標籤:

一、背景

  在之前做的小項目裡有一需求是:要求將一活動錄入的資料進行統計,並以excel表格形式匯出來,並且對錶格格式要求並不高。

二、問題分析

  鑒於使用者只要求最終將資料庫中的資料匯出excel,對于格式要求不高,因此只需要在頁面上加入一條連結,後台action中讀取資料然後通過第三方組件匯出,再下載,就能滿足這個簡單的需求了。首先上bing找了有關資料匯出的組件,NPOI是彈出的次數最多的一項,在這裡也要說到以前做winform表單開發用到過水晶報表的方法,其實實現方法比較多,由於以前沒接觸過NPOI,便打算在項目裡使用這個開源的組件。

 

 

三、解決思路或過程

  1. 先準備好資料來源。用的是mysql資料庫,事先在資料中存入一些資料。
  2. 直接切入主題。這裡主要在action裡做操做。先要引入NPOI組件的dll(NPOI最新下載連結) ,再控制器中添加 using NPOI.HSSF.UserModel;
  3. 貼上控制器中action裡代碼:
     public ActionResult ExportDormitoryBottleRecycleExcel()        {            NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();            NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");            List<Model> list = new List<Model>();            list = pbsAccess.DeriveList();            //建立欄目            NPOI.SS.UserModel.IRow row = sheet1.CreateRow(0);            row.CreateCell(0).SetCellValue("編號");            row.CreateCell(1).SetCellValue("Col_1");            row.CreateCell(2).SetCellValue("Col_2");            row.CreateCell(3).SetCellValue("Col_3");            row.CreateCell(4).SetCellValue("Col_4");            row.CreateCell(5).SetCellValue("Col_5");            for (int i = 0; i < list.Count; i++)            {                NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);                rowtemp.CreateCell(0).SetCellValue((i + 1).ToString());                rowtemp.CreateCell(1).SetCellValue(list[i].DormitoryNumber.ToString());                rowtemp.CreateCell(2).SetCellValue(list[i].SmallBottleNumber.ToString());                rowtemp.CreateCell(3).SetCellValue(list[i].BigBottleNumber.ToString());                rowtemp.CreateCell(4).SetCellValue(list[i].TotalBottleNumber.ToString());                rowtemp.CreateCell(5).SetCellValue(list[i].PublishTime.ToString());            }
                // 寫入到用戶端
    //.......
                return Content("");        }

     

  4. 首先,先new一個book對象,再NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); 建立一個名為Sheet1的表對象,這裡的Sheet1不是最終輸出的檔案名稱。建立好表格後,需要添加列項。這裡添加這一段NPOI.SS.UserModel.IRow row = sheet1.CreateRow(0);其中的IRow需要注意了,在看過一些別的部落格寫的樣本時,發現一個錯誤便是使用NPOI.SS.UserModel.Row,這裡引用的是2.1.3.1版本,已經更改過來了,應該是用IRow的,這是看了文檔才意識到這裡的問題,糾正這個錯誤。關於NPOI操作的中文文檔,有需要的朋友可以留言,我再貼出來,在這得感謝之前在NPOI開發群裡各路大神的協助。row.CreateCell(i).SetCellValue("編號"),有多少列,i取到多少(從0開始)。
  5. 在表格建好了以後開始匯入資料。list裝好的資料,因此每行遍曆一次,將資料填充進入便可。使用foreach的時候注意,此時第一行已經使用了,被建立了列名,因此需要在一開始的時候,將填充資料的開始行+1即:NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); 資料string轉換也是正常不過的操作。
  6. 然後關鍵是匯出下載的處理
    // 寫入到用戶端              System.IO.MemoryStream ms = new System.IO.MemoryStream();            book.Write(ms);            ms.Seek(0, SeekOrigin.Begin);            Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls","****總表"+ DateTime.Now.ToString("yyyyMMddHHmmssfff")));            Response.BinaryWrite(ms.ToArray());            book = null;            ms.Close();            ms.Dispose();            
  7. System.IO.MemoryStream和Response是兩個很關鍵的處理,在Response中可以對檔案名稱進行處理,string.Formate();在前台只需要加入<a href = "/admin/ExportDormitoryBottleRecycleExcel"></a>標籤。
  8. 實際產生效果
  9.  

 

 

 

四、總結

  最近也在使用NPOI做更多具體的操作,後期會把一些使用心得和大家一起分享,今天實現的功能簡單,如果我思路和方法有誤,懇請各位指正,虛心求教。轉載請註明來源與出處,謝謝合作 By 點將台無將

asp.net mvc4使用NPOI 資料處理之快速匯出Excel文檔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.