一、 下载一个.xls的模板文件,在模板里面(样式布局)

1.  表头布局一个点击按钮

导入用户

×

2.  下载模板的按钮

1、请先下载模板文件:

下载

3.  提示用户

2、将需要导入的数据填写到模板中。请不要修改模板的基本格式

4.  选择要上传的Excel表格

3、选择填写好数据的excel文件(.xls):

5.  上传到应用数据中

上传

6.  打开导入的模态框

function openImportModal() {

$(’#formImportUser
[type=“reset”]’).click();重置表单

$("#modImportUser").modal(‘show’);显示模态框}

7.  下载导入的模板

function
downImportTemplate() {

window.open("@Url.Content("~/OthersMaintenance/UserDataMaintain/DownImportTemplate
“)”);}

1.定义一个方法public ActionResult DownImportTemplate(){}

2.获取模板文件路径

string templateFilePath =
Server.MapPath("~/Document/用户导入模板.xls");

3.模板样式

  1. 引入的样式模板图

5.判断模板是否存在

if (System.IO.File.Exists(templateFilePath))

{string fileName =
System.IO.Path.GetFileName(templateFilePath);
获取文件名称

return File(new System.IO.FileStream(templateFilePath, 以流的形式返回文件

System.IO.FileMode.Open),“application/octet-stream”, fileName);

}else{  return Content(“导入模板不存在,请联系网站管理人员”);不存在 }

二、 用户根据模板填写数据

1. 
文件上传 XMLHttpRequest  获取文件的点击事件function uploadExcelFile(){}

2. 
选择获取文件

var files =
document.getElementById(“fileExcel”).files;

3. 
判断是否有这个文件

if (files.length >
0){

var excelFile =
files[0]; 获取文件

使用XMLHttpRequest上传文件

创建FormData对象

var formData = new FormData();

formData.append(“excelFile”, excelFile); 将数据添加到FormData

var layerIndex =
layer.load()打开加载层

创建XMLHttpRequest对象

var xhr = new XMLHttpRequest();

打开指定的URL 文件上传使用POST提交

xhr.open(“POST”, “@Url.Content(”~/OthersMaintenance/UserDataMaintain/ImportExcel")");

设置回调方法

xhr.onload = function (data) {data.currentTarget.responseText
具体的返回内容

var msg =
JSON.parse(data.currentTarget.responseText);把返回的字符串反序列化为json对象

layer.close(layerIndex);关闭加载层

if (msg.State)
{layer.alert(msg.Text, { icon: 1 });

$("#modImportUser").modal(‘hide’);关闭模态框

刷新表格

tabUserList.reload({page:
{curr: 1重新从第 1 页开始}});

} else { layer.alert(msg.Text,
{ icon: 2 }); }};

发送数据

xhr.send(formData);}else{ layer.alert(“请选择要上传的Excel(.xls)文件”);}

三、 用户上传数据导入

public ActionResult ImportExcel(HttpPostedFileBase excelFile){

ReturnJson msg = new ReturnJson();

try{判断文件的后缀

string fileExtension =
System.IO.Path.GetExtension(excelFile.FileName);

if (".xls".Equals(fileExtension,
StringComparison.CurrentCultureIgnoreCase)){

转换成二进制数组

声明一个和文件大小一致的二进制数组

byte[] fileBytes = new byte[excelFile.ContentLength];

excelFile.InputStream.Read(fileBytes,
0, fileBytes.Length); 将上传的文件转成二进制数组

MemoryStream excelMemoryStream =
new MemoryStream(fileBytes); 将二进制数组转为内存流

NPOI.SS.UserModel.IWorkbook workbook = new
NPOI.HSSF.UserModel.HSSFWorkbook(excelMemoryStream); 将内存流转为工作簿

if
(workbook.NumberOfSheets > 0){ 判断是否存在工作表

NPOI.SS.UserModel.ISheet sheet =
workbook.GetSheetAt(0); 获取第一个工作表

PhysicalNumberOfRows
是物理行的行数 ,不包含空行

判断工作表中是否存在行

if
(sheet.PhysicalNumberOfRows > 0){

将数据保存到DataTable中

DataTable dtExcel = new DataTable();定义DataTable

获取Excel中的标题行,设置dataTable的列名 第二行为标题行,索引为1

NPOI.SS.UserModel.IRow rowHeader =
sheet.GetRow(1);

int cellCount =
rowHeader.LastCellNum; 获取表格的列数

int rowCount =
sheet.LastRowNum + 1; 获取表格的行数

创建DateTable中的列,

for (int i =
rowHeader.FirstCellNum; i < cellCount; i++){

通过遍历行中的每一个单元格,获取标题行各个单元格的数据

DataColumn dtCol = new DataColumn(rowHeader.GetCell(i).StringCellValue.Trim());

dtExcel.Columns.Add(dtCol);} 把列添加到DataTable中

读取Excel中的数据

(sheet.FirstRowNum+2)
第一行是说明行 第二行是标题行,第三行开始才是数据

for (int i =
(sheet.FirstRowNum + 2); i < rowCount; i++){

NPOI.SS.UserModel.IRow row =
sheet.GetRow(i); 获取行

DataRow dtRow =
dtExcel.NewRow();DataTable中创建一行

遍历行中列获取数据

if (row != null){

for (int j =
row.FirstCellNum; j < cellCount; j++){

if (row.GetCell(j) != null){ dtRow[j] =
row.GetCell(j).ToString(); } } }

dtExcel.Rows.Add(dtRow);} 将一行的数据添加到Datatable

removeEmptyRow(dtExcel); 移出掉DataTable中的空行

将dataTable中的数据转换为List<S_User>

查询出所有用户组 和用户角色

List<S_UserGroup> userGroups = (from tabUserGroup in
myModels.S_UserGroup

select
tabUserGroup).ToList();

List<S_UserType> userTypes = (from tabUserType in myModels.S_UserType

select
tabUserType).ToList();

存放所有的用户 包括数据库和添加的 --用于判断工号是否重复

List<S_User> allUsers = (from tabUser in myModels.S_User

select tabUser).ToList();

List<S_User> saveUsers = new List<S_User>();定义存放容器

遍历datatable中的数据

for (int i = 0; i <
dtExcel.Rows.Count; i++){

try{ DataRow dr =
dtExcel.Rows[i];

S_User addUser = new S_User();创建一个S_User实例保存一条用户数据

string userGroupNumber =
dr[“用户组号”].ToString().Trim();用户组号 根据用户组号查询用户组ID

addUser.userGroupID
= userGroups.Single(o => o.userGroupNumber == userGroupNumber).userGroupID;

string userType = dr[“角色”].ToString().Trim();角色

addUser.userTypeID =
userTypes.Single(o => o.userType == userType).userTypeID;

string jobNumber = dr[“工号”].ToString().Trim();工号

int oldCount =
allUsers.Count(o => o.jobNumber == jobNumber);

if (oldCount > 0){

msg.Text = “第” + (i + 1) + “条数据的工号:[” + jobNumber + “]重复,请检查”;

return Json(msg, JsonRequestBehavior.AllowGet); }

addUser.jobNumber =
jobNumber;

string userName = dr[“姓名”].ToString().Trim();姓名

if (string.IsNullOrEmpty(userName)){

msg.Text = “第” + (i + 1) + “条数据的 姓名 未填写,请检查”;

return Json(msg, JsonRequestBehavior.AllowGet); }

addUser.userName =
userName;

string amount = dr[“余额”].ToString().Trim();余额

if (string.IsNullOrEmpty(amount)
|| !Regex.IsMatch(amount, “^\+?[0-9]{1,6}(\.[0-9]{1,2})?$”)){

msg.Text = “第” + (i + 1) + “条数据的余额不正确,请检查”;

return Json(msg, JsonRequestBehavior.AllowGet); }

addUser.amount = Convert.ToDecimal(amount);

string userPassword = dr[“密码”].ToString().Trim();密码

addUser.userPassword
= AESEncryptHelper.Encrypt(userPassword);

string email = dr[“email”].ToString().Trim();email

if (string.IsNullOrEmpty(email)
||

!Regex.IsMatch(email, “^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$”)){

msg.Text = “第” + (i + 1) + “条数据的邮箱格式不正确,请检查”;

return Json(msg, JsonRequestBehavior.AllowGet);}

addUser.userEmail =
email;

string strEnable = dr[“是否开通”].ToString().Trim();是否开通

if (strEnable != “是” &&
strEnable != “否”){

msg.Text = “第” + (i + 1) + “条数据的 是否开通列 值只能填写“是”或者“否”,请检查”;

return Json(msg, JsonRequestBehavior.AllowGet); }

addUser.isEnable =
(strEnable == “是”);

saveUsers.Add(addUser); 添加到要保存的列表saveUsers

allUsers.Add(addUser); 添加到用于查重的列表allUsers  }

catch (Exception e){Console.WriteLine(e);msg.Text
= “第” + (i + 1) + “条数据不正确,请检查”;

return Json(msg, JsonRequestBehavior.AllowGet);} }

进行数据保存

开启事务

if (saveUsers.Count

0){

using (TransactionScope scope = new TransactionScope()){

try{foreach (S_User saveUser in saveUsers){保存用户数据

myModels.S_User.Add(saveUser);

myModels.SaveChanges();

int tUserId =
saveUser.userID; 获取保存后的用户ID

S_VirtualAccount virtualAccount = new S_VirtualAccount();再保存 虚拟账户数据

virtualAccount.userID
= tUserId;设置用户ID

virtualAccount.accountBalance
= saveUser.amount;设置账户余额

virtualAccount.account
= string.Format(“XNZH{0:000000000}”, userID);设置虚拟账号

virtualAccount.account
= string.Format(“XNZH{0:000000000}”, tUserId);设置虚拟账户

myModels.S_VirtualAccount.Add(virtualAccount); 保存数据

myModels.SaveChanges();}

scope.Complete();提交事务msg.State = true;

msg.Text = “数据导入成功,成功导入” + saveUsers.Count() + “条用户数据”;}

catch (Exception e){Console.WriteLine(e);msg.Text
= “数据导入保存失败”;

return Json(msg, JsonRequestBehavior.AllowGet);} } }else{

msg.Text = “导入失败,请检查是填写数据!”; } }else{

msg.Text = “导入失败,请检查是第一个工作表中是否存在数据!”;} }else{

msg.Text = “上传Excel文件中不存在工作表,请检查!”; } }

else{ msg.Text = “请上传Excel(.xls)文件”;} }

catch (Exception e){Console.WriteLine(e);msg.Text
= “上传失败”; }

return Json(msg, JsonRequestBehavior.AllowGet);}

Excel数据的导入相关推荐

  1. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  2. excel导入mysql命令行_使用命令行将Excel数据表导入Mysql中的方法小结

    从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高 ...

  3. Excel数据的导入代码

     一.用户部分 代码讲解: Js部分: Excel数据的导入 下载模板 上传模板代码如下 控制器部分: Excel数据的导入功能 (1)获取文件的后缀判断文件类型是否为指定的文件类型 (2)判断工作簿 ...

  4. java excel批量导入数据库数据_Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  5. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  6. python导入excel数据-Python导入数值型Excel数据并生成矩阵操作

    riginal_Data 因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理. Import_Data import numpy as np impor ...

  7. 在Web界面中实现Excel数据大量导入的处理方式

    在早期Bootstrap框架介绍中,我的随笔<结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传.预览.提交的导入Excel数据操作流程> ...

  8. C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  9. arcgis导入excel数据_导入Excel数据到ArcGIS属性表的两种实用方法

    导入Excel数据到ArcGIS有两种方法,一种是用ArcMap的加载数据(黄色+号那个):另一种是用ArcCatalog直接转为shp文件,两种方法的原理是一样的. 第一种方法 1.Excel数据: ...

  10. mysql数据库中excel数据的导入与导出

    mysql数据库数据与excel数据在python大数据中是比较常见的 在导入导出之前必须先配置好路径权限 1.查看导入导出限制路径 # 查看路径 SHOW VARIABLES LIKE '%secu ...

最新文章

  1. 缓存区溢出漏洞工具Doona
  2. c语言用define预处理命令定义,C语言程序设计第八章预处理命令..doc
  3. leetcode 第 216 场周赛 整理
  4. oracle如何检查是否rac,Oracle RAC 状态检查
  5. linux命令——init 的使用用法
  6. Python爬虫实践: 获取百度贴吧内容
  7. UVA11351 Last Man Standing【约瑟夫环+数学】
  8. 循环buffer的实现_Go并发编程-Channel的设计实现
  9. 老板平常多说点好听的
  10. CRM及协同办公高保真原型、审批管理、办公申请、工单管理、任务管理、日程管理、工作报告、签到考勤、客户管理、销售线索、商机管理、订单管理、账务管理、统计报表、回款管理、发票管理、报销管理、拜访跟进
  11. 机器学习算法(一) K-Means算法简述以及在MNIST上的聚类实现
  12. 好书推荐:创业必看好书排行榜推荐
  13. 怎样让健康码截图合并一张图片_健康码拼图
  14. 批量剔除consul无效服务
  15. assimp批量转模型_IGS模型批量转换成STL模型
  16. 安全研究 # 课题:二进制成分分析(Binary SCA)
  17. (转)移动研究院待遇
  18. mysql 围栏_地理围栏
  19. NLP实践——基于SIFRank的英文关键短语抽取
  20. php新闻增删改查操作

热门文章

  1. LYNC 中文版安装详解-第一部分
  2. 计算机文档里的圆圈,请问在WORD文档里怎样插入数字上的圆点?
  3. python 手动读取cifar10_如何用python解析cifar10数据集图片
  4. Java面向对象-01-类和对象
  5. [hadoop那些事]hadoop及其组件资源 115/百度云
  6. CY7C68000 UTMI PHY芯片介绍
  7. 名额已排到10月 | Apache DolphinScheduler Meetup分享嘉宾继续火热招募中~
  8. mysql 字符串截取,拼接
  9. 临床血液学综合练习题库【3】
  10. 国家计算机一级考试题库百度云,全国计算机一级考试题库