这里简单实现EXCEL的批量导入

直接看代码,里面有注释

前端页面实现

@{
ViewBag.Title = "批量添加数据";
//Layout = null;
}
href="~/Content/jQuery.filer/css/jquery-filer.css" rel="stylesheet" />
href="~/Content/jQuery.filer/css/jquery.filer-dragdropbox-theme.css" rel="stylesheet" />
<script src="~/Content/jQuery.filer/js/jquery.filer.js"></script>
<script src="~/Scripts/jquery-form.js"></script>

.hide {
display: none;
}
td {
height: 50px;
}
.input-group-addon {
width: 85px;
}
.jFiler-item {
list-style: none;
}
jFiler-item-title {
display: none;
}
.jFiler-item-thumb .jFiler-item-info {
display: none;
}
.jFiler-theme-default .jFiler-input {
width: 300px;
}
img {
width: 300px;
}

耗材数据Excel表格批量导入 下载模板

<script type="text/javascript">
$("#btnImport").click(function () {
//debugger;
//加载层
var loadindex = layer.load(0, { shade: false }); //0代表加载的风格,支持0-2
var fd = new FormData();
var file = $("#FileUpload");
var proBar = $("#proBar");
fd.append(file[0].name, file[0].files[0]);
form = $("form");
var hasLoad = $("#hasLoadFile").val()
if (hasLoad.length > 0) {//这里判断是否导入相同文件
var test = new RegExp(hasLoad).test(file.val());//测试file中是否包含相同文件名
if (test) {
layer.msg("文件已经上传,请勿再次导入!", { icon: 5 });
layer.close(loadindex);//关闭加载
return false;
}
} else {
$.ajax({
url: form.attr("action"),
type: "post",
data: fd,
processData: false,
contentType: false,
beforeSend: function () {
proBar.css({ "width": "0%" });
},
success: function (data) {
//关闭加载
layer.close(loadindex);
$("#hasLoadFile").val(data.fileFullName);
layer.msg(data.message, { icon: 6 });
if (data.result == true) {
parent.SearchList();
setTimeout(function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}, 5000);
}
}
});
}
});
</script>

后台需要引用dll

using NPOI.HSSF.UserModel;
//批量导入的页面Action
public ActionResult ExcelAppendData()
{return View();
}/// 
/// 导入Excel方法/// 作者 刘建超:2017年10月16日17:32:11///
 /// [HttpPost]public JsonResult LeadInMethod(){HttpPostedFileBase file = Request.Files["files"];try{string FileName;string savePath;//添加公有字段,成功后传给前台,便于提示用户:文件导入成功,不能重复导入string fileFullName;#region 检查文件/存储文件if (file == null || file.ContentLength <= 0){return Json(new { result = false, message = "文件不能为空,请先浏览选择需要导入的耗材表Excel文件!" }, JsonRequestBehavior.AllowGet);}else{string filename = Path.GetFileName(file.FileName);int filesize = file.ContentLength;//获取上传文件的大小单位为字节bytestring fileEx = System.IO.Path.GetExtension(filename);//获取上传文件的扩展名string NoFileName = System.IO.Path.GetFileNameWithoutExtension(filename);//获取无扩展名的文件名int Maxsize = 20 * 1024 * 1024;//定义上传文件的最大空间大小为20Mstring FileType = ".xls,.xlsx";//定义上传文件的类型字符串FileName = NoFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileEx;if (!FileType.Contains(fileEx)){return Json(new { result = false, message = "文件类型不对,只能导入xls和xlsx格式的文件" }, JsonRequestBehavior.AllowGet);}if (filesize >= Maxsize){return Json(new { result = false, message = "上传文件超过20M,不能上传" }, JsonRequestBehavior.AllowGet);}string path = AppDomain.CurrentDomain.BaseDirectory + @"\Files\Excel";savePath = Path.Combine(path, FileName);fileFullName = filename;#region 文件保存到服务器if (!Directory.Exists(path)){Directory.CreateDirectory(path);}file.SaveAs(savePath);#endregion}#endregion#region 将导入的Excel转换成Table   出现问题:不同IIS会出现版本问题,这里注释改成下面的兼容性//string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + savePath + ";" + "Extended Properties='Excel 12.0;IMEX=1'";//OleDbConnection conn = new OleDbConnection(strConn);//conn.Open();//OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$];", strConn);//DataSet myDataSet = new DataSet();//myCommand.Fill(myDataSet, "Sheet1$");//myCommand.Dispose();//conn.Close();//conn.Dispose();将数据表转换成datatable//System.Data.DataTable table = myDataSet.Tables["Sheet1$"].DefaultView.ToTable();#endregionSystem.Data.DataTable table = new DataTable();if (file.FileName.Substring(file.FileName.LastIndexOf(".") + 1).ToLower() == "xlsx"){table = XlsxImport(savePath);}else{table = XlsImport(savePath);}if (table != null && table.Rows.Count > 0){#region 判断模板正确与否var falseNum = 0;//判断模板错误的列数if (table.Columns.Count == 10)//判断列数是否是十个{HM_ConsumableModel models = new HM_ConsumableModel();//models.ConsNo = models.ConsName = models.ConsSpecification = models.ConsUnit = models.ConsPrice = models.ConsPayPrice = models.ConsSupplier;string[] TemplateTitle = { "耗材编号", "耗材名称", "耗材规格", "单位", "应售", "实售", "生产厂家", "拼音码", "五笔码", "自定义码" };string[] TemplateTitlel = { "ConsNo", "ConsName", "ConsSpecification", "ConsUnit", "ConsPrice", "ConsPayPrice", "ConsSupplier", "PYCode", "WBCode", "CustomCode" };for (int k = 0; k < table.Columns.Count; k++){if (TemplateTitle[k] != table.Columns[k].ColumnName.ToString().Trim())//判断标题是否相同{falseNum++;}else{table.Columns[k].ColumnName = TemplateTitlel[k];//更换标题}}}else{falseNum++;}#endregion#region 数据处理if (falseNum == 0){#region 删除空行数据(耗材名称,耗材规格和单位都为空的时候删除此行数据)ListarrayRows = new List();//存放要删除的行for (int i = 0; i < table.Rows.Count; i++){if (table.Rows[i][1].ToString() == "" && table.Rows[i][2].ToString() == "" && table.Rows[i][3].ToString() == ""){arrayRows.Add(i);}}if (arrayRows.Count > 0){for (int i = 0; i < arrayRows.Count; i++){table.Rows.RemoveAt(i);//移除索引的行}}#endregionvar tableRowsNum = table.Rows.Count;//初始行数table.Columns.Add("IsValid", typeof(int));//加一列:有效table.Columns.Add("HpId", typeof(int));//加一列:医院ID table.Columns.Add("EpUid", typeof(Int64)); //加一列:企业用户ID var hpID = Convert.ToInt32(currentLogin.HpId);var epuID = currentLogin.EpUid;//var hpID = 160;//var epuID = 1;#region 给table循环添加列和列的值for (int i = 0; i < tableRowsNum; i++){table.Rows[i]["IsValid"] = 1;table.Rows[i]["HpId"] = hpID;table.Rows[i]["EpUid"] = epuID;}#endregion#region BulkCopySqlBulkCopyByDatatable(DBConfig.CustomerManage.HM_Consumable, table);#endregionreturn Json(new { result = true, message = "成功导入" + tableRowsNum + "条数据!", fileFullName = fileFullName }, JsonRequestBehavior.AllowGet);}else{return Json(new { result = true, message = "模板错误请重新上传!" }, JsonRequestBehavior.AllowGet);}#endregion}else{return Json(new { result = false, message = "模板无数据!" }, JsonRequestBehavior.AllowGet);}}catch (Exception ex){var values = ex.Message.ToString();var errorMessage = "";if (values == "列“ConsNo”不允许 DBNull.Value。"){errorMessage += "导入异常,原因是:耗材编号不能有空,请检查模板数据表!";}else if (values == "列“ConsPrice”不允许 DBNull.Value。" || values == "列“ConsPayPrice”不允许 DBNull.Value。"){errorMessage += "导入异常,原因是:应售(或实售)不能有空,请检查模板数据表!";}else if (values == "列“ConsSupplier”不允许 DBNull.Value。"){errorMessage += "导入异常,原因是:生产厂家不能有空,请检查模板数据表!";}else{errorMessage += values;}return Json(new { result = false, message = errorMessage }, JsonRequestBehavior.AllowGet);}}#endregion/// 
读取excel Xlsx/// 默认第一行为标头///
 /// excel文档路径/// public static DataTable XlsxImport(string strFileName){DataTable dt = new DataTable();NPOI.XSSF.UserModel.XSSFWorkbook hssfworkbook;using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read)){hssfworkbook = new NPOI.XSSF.UserModel.XSSFWorkbook(file);}var sheet = hssfworkbook.GetSheetAt(0);System.Collections.IEnumerator rows = sheet.GetRowEnumerator();var headerRow = sheet.GetRow(0);int cellCount = headerRow.LastCellNum;for (int j = 0; j < cellCount; j++){var cell = headerRow.GetCell(j);dt.Columns.Add(cell.ToString());}for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++){var row = sheet.GetRow(i);DataRow dataRow = dt.NewRow();for (int j = row.FirstCellNum; j < cellCount; j++){if (row.GetCell(j) != null)dataRow[j] = row.GetCell(j).ToString();}dt.Rows.Add(dataRow);}return dt;}/// 
读取excel Xls/// 默认第一行为标头///
 /// excel文档路径/// public static DataTable XlsImport(string strFileName){DataTable dt = new DataTable();HSSFWorkbook hssfworkbook;using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read)){hssfworkbook = new HSSFWorkbook(file);}var sheet = hssfworkbook.GetSheetAt(0);System.Collections.IEnumerator rows = sheet.GetRowEnumerator();var headerRow = sheet.GetRow(0);int cellCount = headerRow.LastCellNum;for (int j = 0; j < cellCount; j++){var cell = headerRow.GetCell(j);dt.Columns.Add(cell.ToString());}for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++){var row = sheet.GetRow(i);DataRow dataRow = dt.NewRow();for (int j = row.FirstCellNum; j < cellCount; j++){if (row.GetCell(j) != null)dataRow[j] = row.GetCell(j).ToString();}dt.Rows.Add(dataRow);}return dt;}/// 
/// SqlBulkCopy批量导入数据 Attention:SqlBulkCopy中列的名称受大小写敏感限制,因此在构造DataTable的时候应请注意列名要与表一致。///
 /// 数据库目标表/// 源数据private void SqlBulkCopyByDatatable(string TableName, System.Data.DataTable dt){using (var dbConnection = SqlDbHelper.CreateConnection()){var connectionString = ConfigurationManager.ConnectionStrings["SqlConnString"].ConnectionString;using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)){try{sqlbulkcopy.DestinationTableName = TableName;for (int i = 0; i < dt.Columns.Count; i++){sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);}sqlbulkcopy.WriteToServer(dt);}catch (System.Exception ex){throw ex;}}}}


这里使用了SqlBulkCopy的写入方法。注意的内容标注在region后面。

EXCEL批量导入数据MVC相关推荐

  1. 【转帖】Java实现Excel批量导入数据

    这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...

  2. SpringMVC框架通过Excel批量导入数据

    文章目录 SpringMVC框架通过Excel批量导入数据 1.导入需要的jar包 2.配置文件 3.创建Java对象类 4.解析Excel表格数据的工具类 5.前端请求 6.Controller处理 ...

  3. Spring Boot 实现excel 批量导入数据(模板下载 ->数据导入->导入失败表格下载)

    批量导入数据以用户为例[不贴数据库操作代码,都是简单的插入和查询操作自己写] 1 导入依赖 2 批量导入模板下载 3 批量导入数据 准备工作 实现代码 测试接口 4 下载导入失败表格 5 实体类 6 ...

  4. excel批量导入数据

    这个功能也是我以前项目中经常用到的,感觉很实用,必须拿来分享下: excel进行批量导入数据,结合struts2+ajax 导入的视图:batchAdd.ftl(视图无关紧要的,可以换成其他任何视图, ...

  5. java使用POI实现Excel批量导入数据。

    1.背景 项目中有使用easypoi,处理常规excel问题,但是现在有个需求,需要动态生成导出的报表字段.同时,根据导入的excel,增加数据信息.(有可能会出现,导入的报表是几天前下载的,不会最新 ...

  6. Springboot Excel批量导入数据

    POI处理Excel <!-- poi处理excel --><dependency><groupId>org.apache.poi</groupId>& ...

  7. Java实现Excel批量导入数据

    Excel的批量导入是很常见的功能,这里采用 Jxl实现,数据量或样式要求较高可以采用 poi 框架环境:Spring + SpringMvc(注解实现) 首先导入依赖jar包 <depende ...

  8. 如何使用excel批量导入数据到数据库?看这一篇就够了!超详细

    应用场景 当我们遇到要批量新增数据库条数的时候 1.你可以写一个接口去用excel去导入,可以自动化,但是前提是你知道你要新增的表和流程才可以 2.可以用excel直接进行数据库导入 excel导入数 ...

  9. php 用excel 批量导入数据

    public function post(){if($this->request->isPost()){vendor("PHPExcel.PHPExcel");//导入 ...

最新文章

  1. OpenCV(26)图像分割 -- 距离变换与分水岭算法(硬币检测、扑克牌检测、车道检测)
  2. PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
  3. IDEA 快捷键MacOS
  4. gradle 2.1构建android出现错误的解决方案
  5. html中post和get区别
  6. 阿里云CDN操控2.0版本正式发布
  7. mysql配置环境变量,进阶加薪全靠它!
  8. 1.8 Linux用户与用户组文件权限
  9. ssh链接数设置问题
  10. 第7章 XSL高级应用
  11. 幼儿园带括号算式口诀_巧记数学公式,背熟这41组数学顺口溜就对了!
  12. app后端开发系列文章文件夹
  13. mysql的升序和降序
  14. Wireshark 基础 | 简介篇
  15. java利用数组求平均值_Java程序使用数组计算平均值
  16. 智慧班级管理系统 java
  17. 课程设计 齿轮油泵泵体的机械加工工艺规程及工艺夹具装备设计
  18. 小米路由器 ping 测试软件,小米路由器3 测试: 自建简单智能家居
  19. 【BOI2007】逃跑问题 (BSOI2344)
  20. Jetson nano/NX 部署Yolo v5过程记录

热门文章

  1. 大数据周刊专访Kyligence CTO李扬 | 我们让数据驱动你的每一个重要决策
  2. idea上如何跑java程序_java – 如何在Intellij IDEA中运行Applet?
  3. V5shop漏洞,V5shop 0day,V5shop注入漏洞,v5shop注入攻击
  4. pycharm2020.1.1专业版安装指南
  5. web-文件上传【超详细讲解】
  6. 模拟电路53(高阶有源滤波电路)
  7. [Matlab] 使用 solve 和 null 代替 eig 求解特征方程可能得到不一样的结果
  8. 拉线式位移传感器使用案列
  9. 如何使用计算机创电子表格,Numbers怎么创建电子表格 Numbers创建表格教程
  10. 自控:梅森公式总是数错,怎么破?