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;//测试看是否有数据
        }
       

原文地址:https://www.cnblogs.com/macT/p/11613663.html

时间: 2024-11-06 03:52:29

ASP.NETCore -----导入Excel文件的相关文章

Yii 2 &mdash;&mdash; 导入Excel文件

导入Excel文件需要两个扩展:PHPOffice/PHPExcel和moonlandsoft/yii2-phpexcel,这两个扩展中,PHPOffice/PHPExcel是基础的Excel文件接口,moonlandsoft/yii2-phpexcel提供了导入和导出的功能. 引入PHPOffice/PHPExcel 官网地址: https://github.com/PHPOffice/PHPExcel 下载后解压,拷贝到vendor/PHPExcel目录下,整体目录结构如下: PHPExce

基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能

思路: 1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳): 2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下: 3.然后前端,上传附件成功后,进行请求后端,读取数据,后端接口对应将附件数据读取出来,前端进行显示(ajax请求): 4.前端展示数据,用户对数据检测无误,点击保存(ajax请求后端保存代码的接口),当然也可以有选择性的选择某些数据记录进行保存,楼主这里做的是全部保存(后端处理接口,自动过滤重复数据): 5.拿到对应的所需有用数

YII使用PHPExcel导入Excel文件的方法

1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php [php] view plaincopy 'import'=>array( 'application.extensions.PHPExcel.PHPExcel', ), (以下处理PHPExcel autoload和YII autoload相冲突的方法任选其一,推荐第4种,最符合YII标准) 3.1.修改PHPExc

Java POI导入Excel文件

今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar poi-excelant-3.8-20120326.jar poi-ooxml-3.8-20120326.jar poi-ooxml-schemas-3.8-20120326.jar poi-scratchpad-3.8-20120326.jar xmlbeans-2.3.0.jar 附上百度云盘

django 导入Excel文件 ORM 批量操作

导入excel文件后批量插入"bulk_create"方法 1.先定义数据模型 from django.db import models from django.utils.translation import ugettext_lazy as _ ACTIVE_TYPE = ( (1, _(u"已激活")), (0, _(u"未激活")), ) class Unit(models.Model): """ 社会单位

Java导入Excel文件

package com.cme.core; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Ar

excel数据 入库mysql 和 mysql数据 导入excel文件

1.excel数据入库mysql 首先准备excel文件, 标红的地方需要留意,一个是字段名所在行,一个表名对应页: 然后私用mysql工具 navicat, 选择数据库,然后导入文件, 选中相应execl文件,即可导入. 栏位名行  对应excel文件中,字段名所在的行. 第一个数据行  对应excel文件中,第一行数据所在的行. ----------------------------------------------------------------------------------

jeecg3.5中的导入excel文件的使用及完善

jeecg中导入导出excel文件使用了jeecg团队自己开发的一个easypoi库,所以使用起来非常简单,以我项目中导入黑名单列表功能为例: 在实体中增加注解 先增加类的注解: @ExcelTarget("blackListEntity") public class BlackListEntity implements java.io.Serializable { 再增加字段注解: /**手机号码*/ @Excel(name="手机号码") private Lon

Asp.Net 导入Excel表格

前台页面: <div align="center" style="background-color:Beige"> <table style="width: 576px; border-collapse: separate; text-align: center"> <tr><td>Excel导入SQL数据库</td></tr> <tr> <td style