zoukankan      html  css  js  c++  java
  • Mvc导入导出Excel

    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
     
    <h2>Index</h2>
     
    @Html.ActionLink("导出用户", "ExportExcel")
    <br />
    @using (@Html.BeginForm("ImportExcel", "Excel", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <text>选择上传Excel文件:</text>
        <input name="file" type="file" id="file" />
        <input type="submit" name="Upload" value="批量导入用户" />
      控制器部分:
    
    public class ExcelController : Controller
        {
            //
            // GET: /Excel/
     
            public ActionResult Index()
            {
                return View();
            }
            /// <summary>
            /// 批量导出Excel
            /// </summary>
            /// <returns></returns>
            public FileResult ExportExcel()
            {
                //创建Excel文件的对象
                NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                //添加一个sheet
                NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
                //获取list数据
                WinDataEntities db = new WinDataEntities();//EF上下文对象
                List<UserInfo> list = db.UserInfo.Where<UserInfo>(u => true).ToList();
                //给sheet1添加第一行的头部标题
                NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
                row1.CreateCell(0).SetCellValue("姓名");
                row1.CreateCell(1).SetCellValue("登录名");
                //将数据逐步写入sheet1各个行
                for (int i = 0; i < list.Count; i++)
                {
                    NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
                    rowtemp.CreateCell(0).SetCellValue(list[i].TrueName);
                    rowtemp.CreateCell(1).SetCellValue(list[i].UserName);
                }
                // 写入到客户端 
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                book.Write(ms);
                ms.Seek(0, SeekOrigin.Begin);
                return File(ms, "application/vnd.ms-excel", "用户.xls");
            }
            /// <summary>
            /// 批量导入Excel
            /// </summary>
            /// <returns></returns>
            public ActionResult ImportExcel()
            {
                try
                {
     
                HttpPostedFileBase file = Request.Files["file"];//接收客户端传递过来的数据.
                    if(file==null)
                    {
                        return Content("请选择上传的Excel文件");
                    }
                    else
                    {
                        //对文件的格式判断,此处省略
                        WinDataEntities db = new WinDataEntities();//EF上下文对象
                        Stream inputStream = file.InputStream;
                        HSSFWorkbook hssfworkbook = new HSSFWorkbook(inputStream);
                        NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0);
                        // IRow headerRow = sheet.GetRow(0);//第一行为标题行
                        // int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells
                        int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1
     
                        for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
                        {
                            IRow row = sheet.GetRow(i);
                            NewUser model = new NewUser();
     
                            if (row != null)
                            {
                                if (row.GetCell(0) != null)
                                {
                                    model.TrueName = GetCellValue(row.GetCell(0));
                                }
                                if (row.GetCell(1) != null)
                                {
                                    model.LoginName = GetCellValue(row.GetCell(1));
                                }
     
                            }
     
                            db.NewUser.Add(model);
                        }
                        db.SaveChanges();
                        return Content("导入成功");
                    }
     
                }
                catch (Exception)
                {
     
                    return Content("导入失败");
                }
                 
     
            }
            /// <summary>
            /// 根据Excel列类型获取列的值
            /// </summary>
            /// <param name="cell">Excel列</param>
            /// <returns></returns>
            private static string GetCellValue(ICell cell)
            {
                if (cell == null)
                    return string.Empty;
                switch (cell.CellType)
                {
                    case CellType.Blank:
                        return string.Empty;
                    case CellType.Boolean:
                        return cell.BooleanCellValue.ToString();
                    case CellType.Error:
                        return cell.ErrorCellValue.ToString();
                    case CellType.Numeric:
                    case CellType.Unknown:
                    default:
                        return cell.ToString();//This is a trick to get the correct value of the cell. NumericCellValue will return a numeric value no matter the cell value is a date or a number
                    case CellType.String:
                        return cell.StringCellValue;
                    case CellType.Formula:
                        try
                        {
                            HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
                            e.EvaluateInCell(cell);
                            return cell.ToString();
                        }
                        catch
                        {
                            return cell.NumericCellValue.ToString();
                        }
                }
            }
     
        }
    有错误的请多多指教,共同进步(๑•ᴗ•๑)
    By听雨的人
  • 相关阅读:
    一行Haskell语句打印勾股数
    给孩子增加学习生物的兴趣,买了个显微镜
    实现求n个随机数和为sum的haskell程序
    用haskell实现的八皇后程序
    桥牌笔记:第一墩决定成败
    读书笔记:父母离去前要做的55件事
    LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项
    LINQ to SQL系列四 使用inner join,outer join
    Asp.Net 4.0 新特性 系列 之一 从页面标记<%%>说起
    使用javascript自动标记来自搜索结果页的关键字
  • 原文地址:https://www.cnblogs.com/GoCircle/p/5824730.html
Copyright © 2011-2022 走看看