前端代码

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的更多相关文章

  1. [办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)

    一年多以前就买了@Mrexcel的<让excel飞>这本书.整体思路是利用access结合excel,大幅度提高数据分析效率. 最近又拿出来看了看.第十五章,比高级筛选更“高级”,P241 ...

  2. 工作日志,Excel导入树结构数据

    目录 1. 前言 2. 需求分析 2.1 需求难点 2.2 解决难点 2.3 表格设计 3. 功能实现 3.1 一个分枝 3.2 一个分枝多个树叶 3.3 多个分枝多个树叶 4. 代码事例 4.1 目 ...

  3. PHP 清除 Excel 导入的数据空格

    处理excel中的数据时,遇到了页面中显示为空格,审查元素时却显示为换行,使用replace函数也不管用,反正就是不知道是什么东西,看起来像空格 中文空格这里面有好几种:没有简单的解决问题的方式,比如 ...

  4. Talend 从Excel导入Saleforce数据(二) TMAP是精髓

    TMap LookUp 经过测试的结果: ------------------------------------------ LookUp最好从CSV读数据,这样是最快了(20万记录1s).从Sal ...

  5. Talend 从Excel导入Saleforce数据(一) 直接从salesforce lookup 性能的噩梦

    速度的瓶颈是在查询Sales force是否有该电话号码的联系人资料. TMap属性的 lookup Model, 如果用Load Once, 则会把SaleForce的contact全部load下来 ...

  6. excel导入mysql数据

    excel加载mysql数据 1.第一步,选择从mysql导入数据 2.单击会出现弹框: 3.可能有的同学的,这里缺少插件,例如: 4.去下载 这个 插件安装即可.https://dev.mysql. ...

  7. 将Excel导入到数据中

    常用的方式的有两种: 1. 通过 Microsoft.Jet.OLEDB.4.0 或  Microsoft.ACE.OLEDB.12.0 Microsoft.ACE.OLEDB.12.0 需要安装 A ...

  8. java利用jxl实现Excel导入功能

    本次项目实践基于Spring+SpringMvc+MyBatis框架,简单实现了Excel模板导出.和Excel批量导入的功能.实现过程如下:. 1.maven导入所需jar包 <depende ...

  9. JeeSite中Excel导入导出

    在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...

  10. Excel导入保存附件和解析数据

    Excel导入保存附件和解析数据 一,前端上传附件的组件 1.先给一个下载模板的按钮 // 下载Excel模板 downLoadExcel: function () { window.open(GLO ...

随机推荐

  1. 代码随想录Day19

    235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个 ...

  2. Windows 安装 OpenSSH

    使用命令行安装 安装 OpenSSH 服务端和客户端 在管理员终端下运行以下命令: # 检查 OpenSSH 可用性 Get-WindowsCapability -Online | Where-Obj ...

  3. Java Script网页设计案例

    1. JavaScript网页设计案例 下面我将提供一个简单的JavaScript网页设计案例,该案例将实现一个动态的待办事项列表(Todo List).用户可以在页面上添加新的待办事项,标记它们为已 ...

  4. Effective C++——Item33: 避免隐藏继承的名字

    Effective C++--Item33: 避免隐藏继承的名字 一.从原理理解隐藏 从变量作用域看隐藏 全局变量x和局部变量x的类型是不同的,但C++的隐藏规则:只隐藏名字(hiding names ...

  5. 如何发布一个Vue组件到Npm上?

    前端时间做了一个基于Vue的拼图验证组件,因为公司需要,就想着做完之后放到Npm上,方便使用 发布流程如下: 1. 创建一个Npm账号并进行邮箱确认(很重要) 2. 创建一个文件夹,然后 npm in ...

  6. 微软RDL远程代码执行超高危漏洞(CVE-2024-38077)漏洞检测排查方式

    漏洞名称:微软RDL远程代码执行超高危漏洞(CVE-2024-38077) CVSS core:   9.8 漏洞描述: CVE-2024-38077 是微软近期披露的一个极其严重的远程代码执行漏洞. ...

  7. C# 调用WebService 笔记

    最近开发工作涉及到一些关于webService调用的问题,因为太久没有做过这部分,踩了一点坑,做个笔记记录一下,避免下次踩坑. 说明 C#调用webService基本有两种方法,一种是静态调用,也就是 ...

  8. CSS – Transform

    前言 之前写的 W3Schools 学习笔记 (3) – CSS 2D Transforms. 这篇作为整理. 参考: Youtube – Learn CSS Transform In 15 Minu ...

  9. MonoDevelop 的续集dotdevelop

    DotDevelop 是一个跨平台的 .NET 集成开发环境(IDE),它原本是 MonoDevelop 的分支项目,这个项目更侧重于 Linux 支持和 GTK3 升级,github:https:/ ...

  10. freemarker实现导出word复选框可点击效果

    记一次java导出word文档,导出的word文档里包含复选框并且能点击,一开始做了个输出字符的,比如这样: □,然而并不能满足需求,网上找了一大堆也都是这种的. 正文开始: 先在word中添加复选框 ...