C# MVC 實現導入導出


導入導出引用NPOI

 

 視圖

 1   <input type="button" name="name" class="btn btn-success btn-sm" onclick="GetExcel()" value="導出"  />
 2             <form action="/Default/Import" method="post" enctype="multipart/form-data">
 3                 <input type="file" name="file" id="file" />
 4                 <input type="submit" name="name" class="btn btn-success btn-sm" value="導入" />
 5             </form>
 6 <script>
 7     //導出
 8       function GetExcel() {
 9     //window.location.href刷新當前頁面,當前頁面打開URL頁面,同步提交
10     window.location.href = "@Url.Action("ExportByNPOI")";
11         }
12 </script>
Index.cshtml

控制器

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using 導入導出.Models;

namespace 導入導出.Controllers
{
    public class DefaultController : Controller
    {
        /// <summary>
        /// 數據存儲
        /// </summary>
        //List<StudentViewModel> stu = new List<StudentViewModel>()
        //{
        //     new StudentViewModel{Id=1,Name="小明",Sex="男",DateTime="2019-11-07",Static=1},
        //     new StudentViewModel{Id=2,Name="小紅",Sex="女",DateTime="2019-11-08",Static=0},
        //     new StudentViewModel{Id=3,Name="小蘭",Sex="女",DateTime="2019-11-09",Static=0},
        //     new StudentViewModel{Id=4,Name="小天",Sex="男",DateTime="2019-11-11",Static=1},
        //     new StudentViewModel{Id=5,Name="阿亮",Sex="男",DateTime="2019-11-12",Static=0},
        //     new StudentViewModel{Id=6,Name="王大力",Sex="男",DateTime="2019-11-13",Static=1}
        //};
        string sql = "select * from student";
       
        // GET: Default
        public ActionResult Index()
        {
            List<StudentViewModel> stu = MySqlDBHelper.GetList<StudentViewModel>(sql);
            return View(stu);
        }
        /// <summary>
        /// 導出Excel
        /// </summary>
        /// <returns></returns>
        public ActionResult ExportByNPOI()
        {
            List<StudentViewModel> stu = MySqlDBHelper.GetList<StudentViewModel>(sql);
            //1、獲取數據源
            var result = stu;
            var list = result.Select(x => new { x.Id, x.Name, x.Sex, x.DateTime, x.Static }).ToList();
            //2、創建Excel文件的對象
            NPOI.HSSF.UserModel.HSSFWorkbook excel = new NPOI.HSSF.UserModel.HSSFWorkbook();
            //3、添加一個sheet
            NPOI.SS.UserModel.ISheet sheet = excel.CreateSheet("Sheet1");
            //給sheet1添加標題行
            NPOI.SS.UserModel.IRow head = sheet.CreateRow(0);
            head.CreateCell(0).SetCellValue("編號");
            head.CreateCell(1).SetCellValue("姓名");
            head.CreateCell(2).SetCellValue("性別");
            head.CreateCell(3).SetCellValue("入學時間");
            head.CreateCell(4).SetCellValue("狀態");
            //將數據逐步寫入sheet1各個行
            for (int i = 0; i < list.Count; i++)
            {
                NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 1);
                row.CreateCell(0).SetCellValue(list[i].Id);
                row.CreateCell(1).SetCellValue(list[i].Name);
                row.CreateCell(2).SetCellValue(list[i].Sex);
                row.CreateCell(3).SetCellValue(list[i].DateTime);
                row.CreateCell(4).SetCellValue(list[i].Static);
            }
            //寫入到客戶端
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            excel.Write(ms);
            ms.Seek(0, System.IO.SeekOrigin.Begin);
            return File(ms, "application/vnd.ms-excel", "顧客信息表.xls");
        }
        /// Excel導入
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public ActionResult Import(HttpPostedFileBase file)
        {
            
            string msg="";
            if (file == null)
            {
                msg = "導入失敗";
            }
            else
            {
                //1、先保存上傳的excel文件(這一步與上傳圖片流程一致)
                string extName = file.FileName;
                string path = Server.MapPath("~/Content/Files");
                string filename = Path.Combine(path, extName);
                file.SaveAs(filename);
                //2、讀取excel文件(通過oledb將excel數據填充到datatable)
                //HDR=Yes,這代表第一行是標題,不做為數據使用,IMEX的含義(0:寫入,1:讀取,2:讀取與寫入)
                string filePath = filename;//必須是物理路徑
                string conStr = "Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" + filePath + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";

                OleDbDataAdapter adp = new OleDbDataAdapter("select * From[Sheet1$]", conStr);
                //默認讀取的Sheet1,你也可以把它封裝變量,動態讀取你的Sheet工作表
                DataTable dt = new DataTable();
                adp.Fill(dt);
                //3、將table轉化成list
                List<StudentViewModel> list = new List<StudentViewModel>();

                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow item in dt.Rows)
                    {
                        list.Add(new StudentViewModel()
                        {
                            //有哪個寫哪個
                            Id = int.Parse(item["編號"].ToString()),
                            Name = item["姓名"].ToString(),
                            Sex = item["性別"].ToString(),
                            DateTime = item["入學時間"].ToString(),
                            Static = int.Parse(item["狀態"].ToString())
                        });
                    }
                }
                //4、跨action傳值用tempdata
                //TempData["list"] = list;
                //return RedirectToAction("List");

                //如果不直接導入數據庫這里不用寫
                StudentViewModel model = new StudentViewModel();
                for (int i = 0; i < list.Count; i++)
                {
                    model.Id = list[i].Id;
                    model.Name = list[i].Name;
                    model.Sex = list[i].Sex;
                    model.DateTime = list[i].DateTime;
                    model.Static = list[i].Static;
                    //調用添加方法
                    //var result = await baseRepository.Add(model);
                    //if (result > 0)
                    //{
                    //  msg = "導入成功";
                    //}
                    DAL dal = new DAL();
                    int result = dal.Create(model);
                    if (result > 0)
                    {

                        msg = "導入成功!";
                    }
                }
            }
           
            return Json(msg);
        }
        public class DAL {
            public int Create(StudentViewModel model)
            {
                string sql = string.Format("insert into Student(Id,Name,Sex,DateTime,Static) values('{0}','{1}','{2}','{3}','{4}')", model.Id, model.Name, model.Sex, model.DateTime, model.Static);
                int result = MySqlDBHelper.ExecuteNonQuery(sql);
                return result;
            }
        }
    }
}
Controller

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM