asp.net MVC 基于NPOI批量从Excel文件导入到数据库,不需要安装Office

本文详细介绍如何使用NPOI库读取Excel文件并导入数据到数据库,包括创建测试数据、定义Import类读取Excel、使用Request.Files接收上传文件、验证文件类型、保存文件、读取数据到DataTable及导入数据库的全过程。
摘要由CSDN通过智能技术生成

本示例基于NPOI,请先添加NPOI.dll的引用

1、建立一个Excel文件,插入几条测试数据

2、定义一个Import类,用于读取Excel文件,并保存到DataTable 

  /// <summary>  
        /// 读取excel ,默认第一行为标头  
        /// </summary>  
        /// <param name="strFileName">excel文档路径</param>  
        /// <returns></returns>  
        public static DataTable Import(string strFileName)
        {
            DataTable dt = new DataTable();

            HSSFWorkbook hssfworkbook;
            using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook = new HSSFWorkbook(file);
            }
            ISheet sheet = hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

            IRow headerRow = sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;

            for (int j = 0; j < cellCount; j++)
            {
                ICell cell = headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }

            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                IRow row = sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();

                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        dataRow[j] = row.GetCell(j).ToString();
                }

                dt.Rows.Add(dataRow);
            }
            return dt;
        }

 3、使用Request.Files接收从页面传递的文件参数,用上面的方法读取然后导入到数据库,导入数据库代码请按照自己的要求自行增加

 public JsonResult toImport()
 { 
            HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
            if (files.Count == 0)
            {
                return Json(new { result = "NO", message = "请选择文件" }, "text/html", JsonRequestBehavior.AllowGet);
            }
            string IsXls = System.IO.Path.GetExtension(files[0].FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
            if (IsXls != ".xls" && IsXls != ".xlsx")
            {
                return Json(new { result = "NO", message = "只可以选择.xls文件" }, "text/html", JsonRequestBehavior.AllowGet);
            }

            string filename = DateTime.Now.ToString("yyyymmddhhMMss") + files[0].FileName;              //获取Execle文件名  DateTime日期函数
            string savePath = Server.MapPath(("~\\upload\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
            files[0].SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上

            DataTable dt = Import(savePath);
            DataRow[] dr = dt.Select();            //定义一个DataRow数组
            int rowsnum = dt.Rows.Count;
            if (rowsnum == 0)
            {
                return Json(new { result = "NO", message = "Excel表为空表,无数据!" }, "text/html", JsonRequestBehavior.AllowGet);
            }
            else
            {
                List<excel.DAL.excel> lex = new List<excel.DAL.excel>();
                string error = string.Empty;
                for (int i = 0; i < dr.Length; i++)
                {
                    string c1 = dr[i]["1"].ToString().Trim();
                    string c2 = dr[i]["2"].ToString().Trim();
                    string c3 = dr[i]["3"].ToString().Trim();
                    string c4 = dr[i]["4"].ToString().Trim();
                    string c5 = dr[i]["5"].ToString().Trim();
                    string c6 = dr[i]["6"].ToString().Trim();
                    string c7 = dr[i]["7"].ToString().Trim();
                    string c8 = dr[i]["8"].ToString().Trim();
                    string c9 = dr[i]["9"].ToString().Trim();
                    string c10 = dr[i]["10"].ToString().Trim();


                    //以下执行导入到数据库代码,请自行添加
                    
                    
                }
                ViewBag.lex = lex;

                if (string.IsNullOrEmpty(error))
                {
                    return Json(new { result = "OK", message = "Excle表导入成功" }, "text/html", JsonRequestBehavior.AllowGet);
                }
                else
                {
                    return Json(new { result = "NO", message = error }, "text/html", JsonRequestBehavior.AllowGet);
                }
            }
}

需要示例代码的请在下面留言您的邮箱。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值