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 ...
随机推荐
- Codeforces Round #581 (Div. 2)D(思维,构造,最长非递减01串)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;char s[100007];int main ...
- windows网络编程-C语言实现简单的UDP协议聊天
与TCP协议下编写服务端程序代码类似,但因为是无连接的形式,所以不需要监听. 这次,我用了一点不同的想法:我建立一个服务端,用了两个端口和两个套接字,把服务端作为一个数据转发的中转站,使得客户机之间进 ...
- 超参数 hyperparameters
转载:https://www.cnblogs.com/qamra/p/8721561.html 超参数的定义:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据 ...
- SpringBoot 集成Spring JDBC
(1)在pom.xml中添加依赖 <!--spring-jdbc的依赖--> <dependency> <groupId>org.springframework.b ...
- 设计模式课程 设计模式精讲 8-10 单例设计模式-ThreadLocal线程单例
1 课程讲解 1.1 应用场景 2 代码演练 2.1 threadLocal应用 1 课程讲解 1.1 应用场景 多线程的时候: 使用同步锁使用时间换空间的方式,(线程排队时间比较长) 而使用thre ...
- 设计模式课程 设计模式精讲 17-2 模板方法模式coding
1 代码演练 1.1 代码演练1 1.2 代码演练2(后端课程子类运用钩子方法,加入写手记的方法) 1.3 代码演练3(前端有多个子类,有得需要写手记,有得不需要写,如何实现?) 1 代码演练 1.1 ...
- 设计模式课程 设计模式精讲 11-2 装饰者模式coding
1 代码演练 1.1 代码演练1(未使用装饰者模式) 1.2 代码演练2(使用装饰者模式) 1 代码演练 1.1 代码演练1(未使用装饰者模式) 需求: 大妈下班卖煎饼,加一个鸡蛋加一元,一个火腿两元 ...
- C++11并发编程4------线程间共享数据
举个例子: 刚参加工作的你,只能租房住,嫌房租贵就和别人合租了,两个人住一起只有一个洗手间,每天早上起床的时候,如果你室友在洗手间,你就只能等着,如果你强行进去,那画面就不可描述了.同样的问题,如果多 ...
- eclipse中使用maven创建项目JDK版本默认是1.5
1. 修改maven的settings.xml文件. 添加以下行,jdk版本改为自己需要的版本: <profile> <id>jdk-1.7</id> <ac ...
- java中常用的数据结构--Map
一.定义: 将键映射到值的对象. 地图不能包含重复的键; 每个键可以映射到最多一个值. public interface Map<K,V> 请注意!!!, Map 没有继承 Collect ...