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 ...
随机推荐
- nginx访问目录是没加/的重定向控制
static 模块提供了root与alias功能:发现目标是目录时:但URI末尾未加/时:会返回301重定向:重定向后会加/ 指令 Syntax: server_name_in_redirect on ...
- day2-2循环语句
ECMAScript不存在块级作用域,在循环内部定义的变量也可以在外部访问到 局部变量与全局变量: 1) 使用var操作符定义的变量将成为定义该变量的作用域中的局部变量. 2) 如果在函数中定义变量没 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:偏移列
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- java记录3--抽象
1.由来 利用抽象类是i为了更好的对类加以分类,例如各种植物有具体名字,也有“植物”这个抽象的词对所有具体植物进行归类. 2.抽象类通常用来作为一个类族的最顶层的父类(表示该类族所有事物的共性), 用 ...
- JS原型与原型链继承的理解
一.原型 先从构造函数开始吧! 构造函数是什么?构造函数与其他函数唯一的区别在于调用方式不同.任何函数只要通过new来调用就可以作为构造函数,它是用来创建特定类型的对象. 下面定义一个构造函数 Fem ...
- Python 之并发编程之进程中(守护进程(daemon)、锁(Lock)、Semaphore(信号量))
五:守护进程 正常情况下,主进程默认等待子进程调用结束之后再结束守护进程在主进程所有代码执行完毕之后,自动终止kill -9 进程号 杀死进程.守护进程的语法:进程对象.daemon = True设置 ...
- 查漏补缺之Go的Strings, bytes, runes和字符
字节遍历,字符遍历 https://play.golang.org/p/DeZcCN9aHXo package main import ( "fmt" "unicode/ ...
- Linux系统chmod命令的含义和权限详解
许多喜欢使用chmod命令的用户,对chmod命令的含义和权限仍然不是很清楚,因此在使用的时候对它们造成了一定的麻烦.为了解决这些用户的迷惑,今天小编就和大家一起分享下chmod命令的含义和权限. 对 ...
- SpingBoot学习(一)
一.概述 Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包, ...
- 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息] ...