前端上传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. postInvalidate 解决View.GONE,没有刷新的问题

    问题描述:布局: <ScrollView id="scroll"> <LinearLayout id="container"> < ...

  2. Kafka 启动报错java.io.IOException: Can't resolve address.

    阿里云上 部署Kafka 启动报错java.io.IOException: Can't resolve address. 本地调试的,报错 需要在本地添加阿里云主机的 host 映射   linux ...

  3. Windows服务器权限分析

    一.Windows常见用户 二.Windows常见用组 2.1Windows常见组 2.2Windows2003常见组 三.Windows目录权限 四.Windows2003默认权限 五.不同环境下的 ...

  4. 时间戳转分秒 | 字符串的padStart()和padEnd()

    function _pad(num, n = 2) { let len = num.toString().length while (len < n) { num = '0' + num len ...

  5. 在ng-repeat 中使用 ng-click

    angular 中使用 ng-repeat  过程中,有时需要绑定 事件 click ,使用ng-click ,但是并没有效果,此时应该使用 data-ng-click 替代 ng-click ,并且 ...

  6. CSP-S 2019 初赛游记

    Day 0 上午考了一套毒瘤的数据结构题,考的我心态爆炸SB出题人 晚上考了一套初赛模拟,只考1h,然后我91分,感觉初赛完全没问题? 回寝室后一直在忙活,整理东西什么的,居然将近12点睡? Day ...

  7. docsify简单教程

    简介 一个神奇的文档网站生成器. 简单而轻便(〜18kB压缩) 没有静态构建的HTML文件 多个主题 快速开始 建议docsify-cli全局安装,这有助于本地初始化和预览网站. npm i docs ...

  8. 浅谈脱壳中的附加数据问题(overlay)

    Author:Lenus -------------------------------------------------- 1.前言 最近,在论坛上看到很多人在弄附加数据overlay的问题,加上 ...

  9. ASC码速记

    ASCII表规则记忆 我们仅仅要记住了一个字母或数字的 ASCII 码 (比如记住 A 为 65 , 0 的 ASCII 码为 48 ), 知道对应的大写和小写字母之间差 32. 0 -- 32 按键 ...

  10. luffy 那点事

    1 虚拟环境创建 2 后台:Django项目创建 3 后台配置 4 数据库配置 5 user模块User表 6 前台 7 前台配置 8 前端主页 9 后端主页模块设计 10 xadmin 后台管理 1 ...