激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - ASP.NET中使用開源組件NPOI快速導(dǎo)入導(dǎo)出Execl數(shù)據(jù)

ASP.NET中使用開源組件NPOI快速導(dǎo)入導(dǎo)出Execl數(shù)據(jù)

2019-12-09 13:26junjie ASP.NET教程

這篇文章主要介紹了ASP.NET中使用開源組件NPOI快速導(dǎo)入導(dǎo)出Execl數(shù)據(jù),NPOI是一個很強(qiáng)大的Execl操作組件,需要的朋友可以參考下

相信很多童鞋都開發(fā)過Execl的導(dǎo)入導(dǎo)出功能,最近產(chǎn)品中無論是后臺數(shù)據(jù)分析的需要,還是前端滿足用戶管理的方便,都有Execl導(dǎo)入導(dǎo)出的維護(hù)需求產(chǎn)生。

以前做這個功能,如果是web,利用HttpContext.Current.Response.ContentType =”application/ms-excel”;就可以導(dǎo)出html數(shù)據(jù)表格到execl中,這種方法的問題就是編碼格式的兼容性太差,用Mac OS之類的 office打開直接亂碼給你看?;蛘呤钦{(diào)用office的COM組件,或宏腳本的方式操作Execl,這種方式的主要問題就是客戶端必須要安裝office,如果你裝的是wps還玩不轉(zhuǎn)。

最近產(chǎn)品中使用了NPOI這個開源組件后,上訴方法直接感覺太Out了。先感受一下代碼的魅力:

 

復(fù)制代碼代碼如下:


/// <summary>
/// 導(dǎo)出Execl
/// </summary>
/// <returns></returns>
public FileResult DataExportToExecl()

  //創(chuàng)建Excel文件的對象
  NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
  NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); //添加一個sheet

 

  var _data = CardHelper.GetAllData(); //獲取list數(shù)據(jù),也可以分頁獲取數(shù)據(jù),以獲得更高效的性能
  //給sheet1添加第一行的頭部標(biāo)題
  NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
  row1.CreateCell(0).SetCellValue("排名");
  row1.CreateCell(1).SetCellValue("CardID");
  row1.CreateCell(2).SetCellValue("姓名");
  row1.CreateCell(3).SetCellValue("手機(jī)");
  row1.CreateCell(4).SetCellValue("職位");
  row1.CreateCell(5).SetCellValue("所在公司");
  row1.CreateCell(6).SetCellValue("創(chuàng)建時間");

  //將數(shù)據(jù)逐步寫入sheet1各個行
  for (int i = 0; i < _data.Count; i++)
  {
      NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
      rowtemp.CreateCell(0).SetCellValue(i+1);
      rowtemp.CreateCell(1).SetCellValue(_data[i].ID);
      rowtemp.CreateCell(2).SetCellValue(_data[i].RealName);
      rowtemp.CreateCell(3).SetCellValue(_data[i].Cellphone);
      rowtemp.CreateCell(4).SetCellValue(string.IsNullOrEmpty(_data[i].WorTitle) ? "無" : _data[i].WorTitle);
      rowtemp.CreateCell(5).SetCellValue(string.IsNullOrEmpty(_data[i].Company) ? "無" : _data[i].Company);
      rowtemp.CreateCell(6).SetCellValue(_data[i].CreateDate.ToString());                
  }
  // 寫入到客戶端 
  System.IO.MemoryStream ms = new System.IO.MemoryStream();
  book.Write(ms);
  ms.Seek(0, SeekOrigin.Begin);
  return File(ms, "application/vnd.ms-excel", DateTime.Now.ToString("yyyyMMdd") + ".xls");
}

 

在前端你只要用超文本鏈接到這個Action就可以了,至于是純文本還是按鈕的方式,就根據(jù)自己喜好了。

 

復(fù)制代碼代碼如下:


/// <summary>
/// 導(dǎo)入Execl信息
/// </summary>
/// <returns></returns>
private DataView LoadExeclFile()
{
   //虛擬生成一個DataTable
   DataTable dt = new DataTable();
   dt.Columns.Add("Name", typeof(string));
   dt.Columns.Add("Phone", typeof(string));
   dt.Columns.Add("CID", typeof(string));
   dt.Columns.Add("Status", typeof(string));
   DataRow newRow = null;

 

   string filepath = @"data.xls";  //讀取本地Execl,當(dāng)前路徑是該程序的所在目錄
   HSSFWorkbook wb = new HSSFWorkbook(new FileStream(filepath, FileMode.Open));
   HSSFSheet sheet = wb.GetSheet("data") as HSSFSheet; //獲取execl中名字為data的sheet表格數(shù)據(jù)

   if (sheet == null)
   {
        MessageBox.Show("檢查是否文件路徑和文件名稱有誤!");
   }
   else
   {
        //導(dǎo)入數(shù)據(jù)
        for (int i = 1; i <= sheet.LastRowNum; i++) //獲得所有行數(shù)
        {
             IRow row = sheet.GetRow(i); //讀取當(dāng)前行數(shù)據(jù)
             if (row != null)
             {
                    newRow = dt.NewRow();
                    newRow["Name"] = row.GetCell(0).ToString();
                    newRow["Phone"] = row.GetCell(1).ToString();
                    newRow["CID"] = row.GetCell(2).ToString();
                    newRow["Status"] = row.GetCell(3).ToString();

                    if (IsMobile(row.GetCell(1).ToString()))
                    {
                        dt.Rows.Add(newRow);
                    }

             }
         }

      }

    return dt.DefaultView;
}

 

這個Execl導(dǎo)入功能實現(xiàn)的是將數(shù)據(jù)導(dǎo)入Gridview中去,你如果想導(dǎo)入到數(shù)據(jù)庫或其他數(shù)據(jù)存儲介質(zhì),代碼換成:

 

復(fù)制代碼代碼如下:


/// <summary>
/// 導(dǎo)入Execl信息
/// </summary>
/// <returns></returns>
 private void LoadExeclFile()
{
    string filepath = @"data.xls";  //讀取本地Execl,當(dāng)前路徑是該程序的所在目錄
    HSSFWorkbook wb = new HSSFWorkbook(new FileStream(filepath, FileMode.Open));
    HSSFSheet sheet = wb.GetSheet("data") as HSSFSheet; //獲取execl中名字為data的sheet表格數(shù)據(jù)

 

    if (sheet != null)
    {
        //導(dǎo)入數(shù)據(jù)
        for (int i = 1; i <= sheet.LastRowNum; i++) //獲得所有行數(shù)
        {
               IRow row = sheet.GetRow(i); //讀取當(dāng)前行數(shù)據(jù)
               if (row != null)
               {
                   InsertDataIntoDB(row.GetCell(0).ToString(),row.GetCell(1).ToString(),row.GetCell(2).ToString(),row.GetCell(3).ToString());
               }  
     }    
   } 
}

 

看過代碼之后,我相信你能感知到NPOI的對Execl操作的強(qiáng)大已經(jīng)無法用言語形容了。上訴的導(dǎo)入導(dǎo)出應(yīng)該是平常開發(fā)中使用最頻繁的Execl操作了,而且NPOI基本上已經(jīng)將各類方法封裝到極致了,除非你有特殊業(yè)務(wù)場景,不然只要稍作修改,就能滿足自己不同的業(yè)務(wù)需求了。當(dāng)然,上訴方案還是有些問題所在的,解決思路大體類似,時間換空間,或空間換時間。比如:

–導(dǎo)出數(shù)據(jù)量很大的話,獲取數(shù)據(jù)以及對數(shù)據(jù)加工處理,多會遇到性能問題,嚴(yán)重的話甚至是內(nèi)存溢出,程序報錯。解決思路很簡單, 代碼改造一下,采用分頁獲取數(shù)據(jù),導(dǎo)出到多個sheet或者分成多個execl導(dǎo)出,代碼我就懶得寫了。

總結(jié)一下NPOI的優(yōu)缺點(diǎn)吧:

優(yōu)點(diǎn):使用超級簡潔,小白也能看的明白。獨(dú)立組件,引用即可。無需第三方依賴。編碼靈活控制,兼容性優(yōu)秀。性能使用下來非常優(yōu)異,源碼寫的也特漂亮…

缺點(diǎn):如果有,請告訴我吧!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产伦久视频免费观看视频 | 久久久国产精品免费观看 | 成人在线视频精品 | 久久免费视频1 | 久久国产成人精品国产成人亚洲 | 操你逼| 深夜毛片免费看 | 黑人一区 | 99久久久久国产精品免费 | 久久久久久久黄色片 | 久草在线视频在线 | 欧美成人性生活片 | 精品国产久 | 久久精品一区二区三 | 欧美成人一区二区三区 | 国产成人在线观看网站 | 国产午夜精品理论片a级探花 | 91高清完整版在线观看 | 国产免费一区二区三区 | 国产亚洲精品久久777777 | 精品国产网站 | 日韩视频在线一区二区三区 | 一级一级一级一级毛片 | 免费黄色小视频网站 | 成年人黄色免费电影 | 亚洲二区免费 | 日日干天天摸 | 欧美成人免费一级 | 日韩黄色一级视频 | 国产99久久精品一区二区 | 亚洲精品一区二区三区在线看 | 色综合欧美 | 国产九九九九 | www.狠狠插.com | 久久综合网址 | 免费一级肉体全黄毛片 | 国产亚洲精品综合一区91 | 精品国产久 | 一级黄色性感片 | 亚洲综合视频网站 | 免费看黄色一级大片 |