• ASP.NETCore -----导入Excel文件


    前端上传excel文件利用npoi读取数据转换成datatable(netcore坑爹啊,用的vs2017竟然不能可视化)

    前端界面

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Xlsx</title>
    </head>
    <body>
        <form enctype="multipart/form-data" method="post" asp-action="ImportToDataTable">
            <input type="file" name="excelfile" />
            <input type="submit" value="上传" />
        </form>
       
    </body>
    </html>

    后台

     /// <summary>
            /// 导入EXCEL数据  
            /// </summary>
            /// <param name="filePath">文件路径</param>
            /// <returns></returns>
            
            public void  ImportToDataTable(IFormFile excelfile)
            {         
                DataTable dt = new DataTable();
                var filePath = excelfile.FileName.Split('.');
                if (filePath[1].ToLower()==".xls")
                {//.xls
                    #region .xls文件处理:HSSFWorkbook
    
                    HSSFWorkbook hssfworkbook;
                    try
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            excelfile.CopyTo(ms);
                            ms.Seek(0, SeekOrigin.Begin);
                            hssfworkbook = new HSSFWorkbook(ms);
                        }
                       
                        ISheet sheet = hssfworkbook.GetSheetAt(0);
                        System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                        var maxRowIndex = 0;
    
                        while (rows.MoveNext())
                        {
                            IRow row = (HSSFRow)rows.Current;
                            var r = row.Cells.Select(p => p.StringCellValue).ToList();
                            var _result = row.Cells.Any(t => !string.IsNullOrEmpty(t.StringCellValue));
                            if (_result)
                            {
                                maxRowIndex = row.RowNum;
                                break;
                            }
                        }
    
                        HSSFRow headerRow = (HSSFRow)sheet.GetRow(maxRowIndex);//取第二行
    
                        var _ColumnIndex = new List<int>();
    
                        //一行最后一个方格的编号 即总的列数 
                        for (int j = 0; j < (headerRow.LastCellNum); j++)
                        {
                            //SET EVERY COLUMN NAME
                            HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
    
                            if (!string.IsNullOrEmpty(cell.StringCellValue))
                            {
                                dt.Columns.Add(cell.ToString());
                                _ColumnIndex.Add(cell.ColumnIndex);
                            }
                        }
    
                        while (rows.MoveNext())
                        {
                            IRow row = (HSSFRow)rows.Current;
                            DataRow dr = dt.NewRow();
    
                            if (row.RowNum <= headerRow.RowNum) continue;
    
                            for (int i = 0; i < _ColumnIndex.Count; i++)
                            {                            
                                if (i >= dt.Columns.Count)
                                {
                                    break;
                                }
                                ICell cell = row.GetCell(_ColumnIndex[i]);
    
                                if ((i == 0) && cell == null)//每行第一个cell为空,break
                                {
                                    break;
                                }
    
                                if (cell == null)
                                {
                                    dr[i] = null;
                                }
                                else
                                {
                                    switch (cell.CellType)
                                    {
                                        case CellType.String:
                                            dr[i] = cell.StringCellValue;
                                            break;
                                        case CellType.Numeric:
    
                                            if (DateUtil.IsCellDateFormatted(cell))
                                            {
                                                dr[i] = cell.DateCellValue;
                                            }
                                            else
                                            {
                                                dr[i] = cell.NumericCellValue;
                                            }
                                            break;
                                        default:
                                            dr[i] = null;
                                            break;
                                    }
                                }
                            }
                          
                                dt.Rows.Add(dr);
                                                
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message, e);
                    }
    
                    #endregion
                }
                else
                {//.xlsx
                    #region .xlsx文件处理:XSSFWorkbook
    
                    XSSFWorkbook hssfworkbook;
                    try
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            excelfile.CopyTo(ms);
                            ms.Seek(0, SeekOrigin.Begin);
                            hssfworkbook = new XSSFWorkbook(ms);
                        }                   
                        ISheet sheet = hssfworkbook.GetSheetAt(0);
                        // ISheet sheet = hssfworkbook.GetSheet(sheetName);
                        System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
    
                        var maxRowIndex = 0;
    
                        while (rows.MoveNext())
                        {
                            IRow row = (XSSFRow)rows.Current;
                            var _result = row.Cells.Any(t => !string.IsNullOrEmpty(t.StringCellValue));
                            if (_result)
                            {
                                maxRowIndex = row.RowNum;
                                break;
                            }
                        }
                        XSSFRow headerRow = (XSSFRow)sheet.GetRow(maxRowIndex);//取第二行
                        var _ColumnIndex = new List<int>();
    
                        //一行最后一个方格的编号 即总的列数 
                        for (int j = 0; j < (headerRow.LastCellNum); j++)
                        {
                            //SET EVERY COLUMN NAME
                            XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
    
                            if (!string.IsNullOrEmpty(cell.StringCellValue))
                            {
                                dt.Columns.Add(cell.ToString());
                                _ColumnIndex.Add(cell.ColumnIndex);
                            }
                        }
    
                        while (rows.MoveNext())
                        {
                            IRow row = (XSSFRow)rows.Current;
                            DataRow dr = dt.NewRow();
    
                            if (row.RowNum == 0) continue;
    
                            for (int i = 0; i < _ColumnIndex.Count; i++)
                            {
                                if (i >= dt.Columns.Count)
                                {
                                    break;
                                }
    
                                ICell cell = row.GetCell(_ColumnIndex[i]);
    
                                if ((i == 0) && (cell == null))//每行第一个cell为空,break
                                {
                                    break;
                                }
    
                                if (cell == null)
                                {
                                    dr[i] = null;
                                }
                                else
                                {
                                    switch (cell.CellType)
                                    {
                                        case CellType.String:
                                            dr[i] = cell.StringCellValue;
                                            break;
                                        case CellType.Numeric:
    
                                            if (DateUtil.IsCellDateFormatted(cell))
                                            {
                                                dr[i] = cell.DateCellValue;
                                            }
                                            else
                                            {
                                                dr[i] = cell.NumericCellValue;
                                            }
                                            break;
                                        default:
                                            dr[i] = null;
                                            break;
                                    }
                                }
                            }
                            dt.Rows.Add(dr);
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception(e.Message, e);
                    }
                    #endregion
                }
                var a =  dt.Rows.Count;//测试看是否有数据
            }
           
  • 相关阅读:
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(20)-权限管理系统-根据权限获取菜单
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(18)-权限管理系统-表数据
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
    MVC解决Json DataGrid返回的日期格式是/Date(20130450000365)
    Easyui 让DataGrid适应浏览器宽度
    Easyui 让Window弹出居中与最大化后居中
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
  • 原文地址:https://www.cnblogs.com/macT/p/11613663.html
Copyright © 2020-2023  润新知