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[].ToLower()==".xls")
{//.xls
#region .xls文件处理:HSSFWorkbook HSSFWorkbook hssfworkbook;
try
{
using (MemoryStream ms = new MemoryStream())
{
excelfile.CopyTo(ms);
ms.Seek(, SeekOrigin.Begin);
hssfworkbook = new HSSFWorkbook(ms);
} ISheet sheet = hssfworkbook.GetSheetAt();
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
var maxRowIndex = ; 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 = ; 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 = ; i < _ColumnIndex.Count; i++)
{
if (i >= dt.Columns.Count)
{
break;
}
ICell cell = row.GetCell(_ColumnIndex[i]); if ((i == ) && 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(, SeekOrigin.Begin);
hssfworkbook = new XSSFWorkbook(ms);
}
ISheet sheet = hssfworkbook.GetSheetAt();
// ISheet sheet = hssfworkbook.GetSheet(sheetName);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); var maxRowIndex = ; 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 = ; 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 == ) continue; for (int i = ; i < _ColumnIndex.Count; i++)
{
if (i >= dt.Columns.Count)
{
break;
} ICell cell = row.GetCell(_ColumnIndex[i]); if ((i == ) && (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.NETCore -----导入Excel文件的更多相关文章
- asp.net 导入excel文件
前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="b2ccarri ...
- ASP.NETCore -----导出Excel文件并下载
本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...
- asp.net读取excel文件多种方法
asp.net读取excel文件的三种方法示例,包括采用OleDB读取Excel文件.引用的com组件读取Excel文件.用文件流读取. 方法一:采用OleDB读取Excel文件 把Excel文件 ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- Java POI导入Excel文件
今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...
- phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。
工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...
- YII使用PHPExcel导入Excel文件的方法
1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...
- springMVC(5)---导入excel文件数据到数据库
springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...
- excel数据 入库mysql 和 mysql数据 导入excel文件
1.excel数据入库mysql 首先准备excel文件, 标红的地方需要留意,一个是字段名所在行,一个表名对应页: 然后私用mysql工具 navicat, 选择数据库,然后导入文件, 选中相应ex ...
随机推荐
- Apache Shiro安全(权限框架)学习笔记二
课程目标 通过学习本课程掌握权限管理的设计思想及方法,使用Shiro框架完成权限管理功能开发. 1. 理解基于资源的权限管理方法. 2. 掌握权限管理的数据模型. 3. 掌握不使用shiro开发 ...
- ES的基本概念
elasticsearch 的索引与文档是开发关注的视角:节点.集群.分片是运维关注的视角 elasticearch 文档的介绍 - elasticearch 是面向文档的,文档是所有可搜索数据的最小 ...
- Java解析Json字符串--数组或列表
Json示例: [ { "age": 25, "gender": "female", "grades": "三 ...
- Linux centos7 Linux网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语法
一. Linux网络相关 yum install net-tools ifconfig查看网卡ip ifup ens33开启网卡 ifdown ens33关闭网卡 设定虚拟网卡ens33:0 mii- ...
- php 增删改查范例(2)
增加页面add.php: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...
- HTML元素和测试用例的简要介绍
HTML和CSS的基本语法就不出教程,线下自己看电子书即可 HTML元素 标签 内容 属性 标签+内容+属性 <html> <head> <title>我的主页&l ...
- 1-Docker学习笔记
docker还是比较容易的,比较蛋疼的就是镜像网络问题,不过也可以配置了镜像加速器(比如阿里云).这里重点记录一下初学docker时遇到的知识点. docker环境变量 docker对环境变量的定义和 ...
- 使用MyCat实现MySQL读写分离
说明 配置MyCat读写分类前需要先配置MySQL的主从复制,参考我上一篇的文章,已经做了比较详细地讲解了. 环境 centos7.MySQL5.7.mycat1.6 配置MyCat账号密码和数据库名 ...
- oracle练习-day02
.查询员工表和部门表.查询出雇员的编号,姓名,部门的编号和名称,地址.查询出每个员工的上级领导.在上一个例子的基础上查询该员工的部门名称.在上一个例子的基础上查询员工工资等级和他的上级领导工资等级.查 ...
- Linux centos7 日常运维——使用w查看系统负载、vmstat命令、top命令、sar命令、nload命令
一.使用w查看系统负载 w .uptime查看系统负载,0.00表示1分钟之内负载为0 cat /proc/cpuinfo查看cpu核数 二.vmstat命令,查看进程.cpu.memory.交换. ...