C# MVC 实现导入导出

2021-03-21 14:25

阅读:524

标签:ring   ppa   ++   这一   gen   etc   http   soft   sum   

导入导出引用NPOI

技术图片

 

 视图

技术图片技术图片
 1   "button" name="name" class="btn btn-success btn-sm" onclick="GetExcel()" value="导出"  />
 2             
"/Default/Import" method="post" enctype="multipart/form-data"> 3 "file" name="file" id="file" /> 4 "submit" name="name" class="btn btn-success btn-sm" value="导入" /> 5
6
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
    {
        /// 
        /// 数据存储
        /// 
        //List stu = new List()
        //{
        //     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 stu = MySqlDBHelper.GetList(sql);
            return View(stu);
        }
        /// 
        /// 导出Excel
        /// 
        /// 
        public ActionResult ExportByNPOI()
        {
            List stu = MySqlDBHelper.GetList(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 )
            {
                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导入
        /// 
        /// 
        /// 
        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 list = new List();

                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 )
                {
                    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

 

 

C# MVC 实现导入导出

标签:ring   ppa   ++   这一   gen   etc   http   soft   sum   

原文地址:https://www.cnblogs.com/xuan666/p/11811182.html


评论


亲,登录后才可以留言!