前端上传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文件的更多相关文章

  1. asp.net 导入excel文件

    前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="b2ccarri ...

  2. ASP.NETCore -----导出Excel文件并下载

    本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...

  3. asp.net读取excel文件多种方法

    asp.net读取excel文件的三种方法示例,包括采用OleDB读取Excel文件.引用的com组件读取Excel文件.用文件流读取.   方法一:采用OleDB读取Excel文件 把Excel文件 ...

  4. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  5. Java POI导入Excel文件

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

  6. phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。

    工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...

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

    1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...

  8. springMVC(5)---导入excel文件数据到数据库

    springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...

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

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

随机推荐

  1. HDU1176免费馅饼(DP)

    都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就 ...

  2. SD-WAN基本介绍

    SD-WAN是什么? SD-WAN,即软件定义广域网络,是将SDN技术应用到广域网场景中所形成的一种服务.这种服务用于连接广阔地理范围的企业网络.数据中心.互联网应用及云服务,旨在帮助用户降低广域网的 ...

  3. Centos7 mariadb (mysql)主从复制实现

    一.mysql基本命令 .启动mysql systemctl start mariadb .linux客户端连接自己 mysql -uroot -p -h 127.0.0.1 .远程链接mysql服务 ...

  4. 设计模式课程 设计模式精讲 10-2 外观模式coding

    1 代码演练 1.1 代码演练1(不使用外观模式) 1.2 代码演练2(使用外观模式) 2 应用核心 2.1 核心 2.2 零碎知识点 1 代码演练 1.1 代码演练1(不使用外观模式) 需求: 木木 ...

  5. APNs推送的系统做法

    1. #pragma mark - 远程推送注册获得device Token if (IOS_VERSION >= 10.0) { UNUserNotificationCenter * cent ...

  6. 【快学springboot】11.整合redis实现session共享

    前言 这里都是基于前面的项目基础上的.springboot整合redis非常的方便,这也是springboot的宗旨,简化配置.这篇文章就教大家如何使用springboot整合redis来实现sess ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:显示下拉式功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. QQ企业通--客户端登陆模块设计---知识点2

    Maximizable 属性               获取一个值,该值指定窗口是否可以最大化. fromBorderstyle 成员名称    说明 None            无边框. Fi ...

  9. js实现深度拷贝

    js实现拷贝,使用普通赋值对象,在操作其中一个对象值的时候,另一个也会更改,不符合需求 因此引入深度拷贝,以下为实现深度拷贝的几种法: Object.assign // 合并多个对象 var targ ...

  10. java读取ini文件

    ini工具类; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import j ...