Excel 导入解析数据 NPOIExcelHelper
前端代码
html
<link href="~/lib/bootstrap-fileinput/css/fileinput.min.css" media="all" rel="stylesheet" type="text/css" />
<link href="~/lib/bootstrap-fileinput/themes/explorer-fa/theme.min.css" media="all" rel="stylesheet" type="text/css" />
<script src="~/lib/bootstrap-fileinput/js/fileinput.min.js" type="text/javascript"></script>
<script src="~/lib/bootstrap-fileinput/js/locales/zh.js" type="text/javascript"></script>
<script src="~/lib//bootstrap-fileinput/themes/explorer-fa/theme.min.js" type="text/javascript"></script>
<script src="~/lib/bootstrap-fileinput/themes/fa/theme.min.js" type="text/javascript"></script>
<div class="modal-body">
<form name="msproject" role="form" method="post" novalidate class="form-validation" enctype="multipart/form-data">
<div class="file-loading">
<input id="kv-explorer" type="file" multiple />
</div>
</form>
</div>
JS
(function ($) {
app.modals.ImportProjectMaterialsModal = function () {
var _modalManager;
var _$form = null;
this.init = function (modalManager) {
_modalManager = modalManager;
var materilaTable = _modalManager.getOptions().importMppOptions.materials;
_$form = _modalManager.getModal().find('form[name=CmsImportMsProjectMaterilasForm]');
_$form.validate({ ignore: "" });
var _projectId = _modalManager.getModal().find('input[name=ProjectId]').val();
var _actionType = _modalManager.getModal().find('input[name=ActionType]').val();
_modalManager.getModal().find('#kv-explorer')
.fileinput({
'theme': 'explorer-fa',
'uploadUrl': '', //上传的地址
language: 'zh', //设置语言
overwriteInitial: false,
showPreview: false,
showClose: false,
allowedFileExtensions: ['xls','xlsx'],
initialPreviewAsData: false,
previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
maxFileCount: 1,//允许同时上传的最大文件数
enctype: 'multipart/form-data',
uploadExtraData: function () {
var data = {
projectId: _projectId,
actionType: _actionType
};
return data;
}
})
.on("fileuploaded", function (event, data, previewId, index) {
abp.notify.info(app.localize('SavedSuccessfully'));
materilaTable.reload();
_modalManager.setResult(data.response.result);
_modalManager.close();
});
};
this.save = function () {
if (!_$form.valid()) {
return;
}
};
}
})(jQuery)
后台上传
string localFileName = null;
string fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);
string location = Path.Combine(""); //上传到的路径
using (FileStream fs = new FileStream(location, FileMode.Create))
{
await file.CopyToAsync(fs);
fs.Close();
localFileName = fs.Name;
}
return await SetupFromMSProjectMaterials(projectId, localFileName);
后台解析使用NPOI
public class NPOIExcelHelper
{
/// <summary>
/// 将excel导入到datatable
/// </summary>
/// <param name="filePath">excel路径</param>
/// <param name="isColumnName">第一行是否是列名</param>
/// <returns>返回datatable</returns>
public static DataTable ExcelToDataTable(string filePath, bool isColumnName)
{
DataTable dataTable = null;
FileStream fs = null;
DataColumn column = null;
DataRow dataRow = null;
IWorkbook workbook = null;
ISheet sheet = null;
IRow row = null;
ICell cell = null;
int startRow = 0;
try
{
using (fs = File.OpenRead(filePath))
{
// 2007版本
if (filePath.IndexOf(".xlsx") > 0)
workbook = new XSSFWorkbook(fs);
// 2003版本
else if (filePath.IndexOf(".xls") > 0)
workbook = new HSSFWorkbook(fs);
if (workbook != null)
{
sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
dataTable = new DataTable();
if (sheet != null)
{
int rowCount = sheet.LastRowNum;//总行数
if (rowCount > 0)
{
IRow firstRow = sheet.GetRow(0);//第一行
int cellCount = firstRow.LastCellNum;//列数
//构建datatable的列
if (isColumnName)
{
startRow = 1;//如果第一行是列名,则从第二行开始读取
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
cell = firstRow.GetCell(i);
if (cell != null)
{
if (cell.StringCellValue != null)
{
column = new DataColumn(cell.StringCellValue);
dataTable.Columns.Add(column);
}
}
}
}
else
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
column = new DataColumn("column" + (i + 1));
dataTable.Columns.Add(column);
}
}
//填充行
for (int i = startRow; i <= rowCount; ++i)
{
row = sheet.GetRow(i);
if (row == null) continue;
dataRow = dataTable.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
cell = row.GetCell(j);
if (cell == null)
{
dataRow[j] = "";
}
else
{
//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
switch (cell.CellType)
{
case CellType.Blank:
dataRow[j] = "";
break;
case CellType.Numeric:
short format = cell.CellStyle.DataFormat;
//对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
if (format == 14 || format == 31 || format == 57 || format == 58)
dataRow[j] = cell.DateCellValue;
else
dataRow[j] = cell.NumericCellValue;
break;
case CellType.String:
dataRow[j] = cell.StringCellValue;
break;
}
}
}
dataTable.Rows.Add(dataRow);
}
}
}
}
}
return dataTable;
}
catch (Exception e)
{
if (fs != null)
{
fs.Close();
}
return null;
}
}
}
Excel 导入解析数据 NPOIExcelHelper的更多相关文章
- [办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)
一年多以前就买了@Mrexcel的<让excel飞>这本书.整体思路是利用access结合excel,大幅度提高数据分析效率. 最近又拿出来看了看.第十五章,比高级筛选更“高级”,P241 ...
- 工作日志,Excel导入树结构数据
目录 1. 前言 2. 需求分析 2.1 需求难点 2.2 解决难点 2.3 表格设计 3. 功能实现 3.1 一个分枝 3.2 一个分枝多个树叶 3.3 多个分枝多个树叶 4. 代码事例 4.1 目 ...
- PHP 清除 Excel 导入的数据空格
处理excel中的数据时,遇到了页面中显示为空格,审查元素时却显示为换行,使用replace函数也不管用,反正就是不知道是什么东西,看起来像空格 中文空格这里面有好几种:没有简单的解决问题的方式,比如 ...
- Talend 从Excel导入Saleforce数据(二) TMAP是精髓
TMap LookUp 经过测试的结果: ------------------------------------------ LookUp最好从CSV读数据,这样是最快了(20万记录1s).从Sal ...
- Talend 从Excel导入Saleforce数据(一) 直接从salesforce lookup 性能的噩梦
速度的瓶颈是在查询Sales force是否有该电话号码的联系人资料. TMap属性的 lookup Model, 如果用Load Once, 则会把SaleForce的contact全部load下来 ...
- excel导入mysql数据
excel加载mysql数据 1.第一步,选择从mysql导入数据 2.单击会出现弹框: 3.可能有的同学的,这里缺少插件,例如: 4.去下载 这个 插件安装即可.https://dev.mysql. ...
- 将Excel导入到数据中
常用的方式的有两种: 1. 通过 Microsoft.Jet.OLEDB.4.0 或 Microsoft.ACE.OLEDB.12.0 Microsoft.ACE.OLEDB.12.0 需要安装 A ...
- java利用jxl实现Excel导入功能
本次项目实践基于Spring+SpringMvc+MyBatis框架,简单实现了Excel模板导出.和Excel批量导入的功能.实现过程如下:. 1.maven导入所需jar包 <depende ...
- JeeSite中Excel导入导出
在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...
- Excel导入保存附件和解析数据
Excel导入保存附件和解析数据 一,前端上传附件的组件 1.先给一个下载模板的按钮 // 下载Excel模板 downLoadExcel: function () { window.open(GLO ...
随机推荐
- CORDIC算法解释及FPGA实现(圆坐标系)
CORDIC算法解释及Verilog仿真(圆坐标系) CORDIC算法原理阐述 CORDIC(Coordinate Rotation Digital Computer)算法,即坐标旋转数字计算方法,是 ...
- Antd-React-TreeSelect前端搜索过滤
在开发过程中,但是antd中的搜索会把多余的也会带出来 就例如下图,我们本想去搜索1但是他会把其子节点都带出来,其实我们的本意是像搜2一样或者当中间隔层处理 但是我们该如何解决这样的问题呢如何做到下面 ...
- MySql 字段类型长度问题理解
mysql中字段长度理解 字符长度 设计表中设置的是字符长度,任意字符都占一个字符长度,使用char_length 函数获取 char_length(`name`) 字节长度 字节长度和数据表的字符集 ...
- CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
在光照条件不佳下捕获的图像可能同时包含过曝和欠曝.目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色.论文提出通过学习估计和校正这种色调偏移,来增强既有 ...
- 实用接地气的 .NET 微服务框架
前言 微服务架构已经成为搭建高效.可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利.为了解决这一问题,于是作者精心打造了一款最接地 ...
- C# WebSocket高并发通信阻塞问题
项目上遇到使用WebSocket超时问题,具体情况是这样的,OTA升级过程中,解压zip文件会有解压进度事件,将解压进度通过进程通信传给另一进程,通信提示超时异常 小伙伴堂园发现大文件使用Zip解压, ...
- ASP.NET Core – Globalization & Localization
前言 之前就写过 2 篇, 只是写的很乱, 这篇作为整理版. Asp.net core (学习笔记 路由和语言 route & language) Asp.net core 学习笔记之 glo ...
- 使用 Flutter 3.19 更高效地开发
我们已隆重推出全新的 Flutter 版本--Flutter 3.19.此版本引入了专为 Gemini 设计的新 Dart SDK.一个能让开发者对 Widget 动画实现精细化控制的全新 Widge ...
- 专场直播预约 | 邀您探讨KaiwuDB 离散制造业场景解决方案
先导语 近日,KaiwuDB 携手山东重工集团有限公司(以下简称:山东重工) 重磅发布"离散制造业解决方案".该方案以 KaiwuDB 就地运算技术专利技术为底座,搭建了&quo ...
- iOS键盘通知弹框使用小结
项目开发中文本框输入的时候经常会用到键盘弹框遮挡的问题.解决办法就是根据底部键盘弹出的高度动态的改变对应view的位置.这里以多行文本框输入为例,效果图如下. //第一步,注册监听键盘通知 [[NSN ...