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

    在项目中添加对NPOI的引用

    视图部分如下:

    @{
        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();
                        }
                }
            }
    
        }
    

      

  • 相关阅读:
    lr 增强窗格中,如何生成调试信息?
    lr 自带的例子,如何进行关联,通过代码的函数进行实现
    lr11 录制脚本时候,无法自动启动ie,查了网上很多方法都未解决?
    loadrunner11 录制脚步不成功,在录制概要出现“No Events were detected”,浮动窗口总是显示“0 Events”,解决办法
    loadrunner11 安装及破解教程来自百度文库
    安装loadrunner11 ,出现如下错误如何解决?
    回收站数据删除了,如何进行恢复?
    网管工作方面——————打印机删除了然后开机重启他依然存在,如何解决
    Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
    Sorry, the page you are looking for is currently unavailable. Please try again later. Nginx
  • 原文地址:https://www.cnblogs.com/bubugao/p/Excel.html
Copyright © 2011-2022 走看看