Excel数据的导入
一、 下载一个.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.模板样式
- 引入的样式模板图
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数据的导入相关推荐
- 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- excel导入mysql命令行_使用命令行将Excel数据表导入Mysql中的方法小结
从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高 ...
- Excel数据的导入代码
一.用户部分 代码讲解: Js部分: Excel数据的导入 下载模板 上传模板代码如下 控制器部分: Excel数据的导入功能 (1)获取文件的后缀判断文件类型是否为指定的文件类型 (2)判断工作簿 ...
- java excel批量导入数据库数据_Java实现Excel数据批量导入数据库
Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...
- Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)
DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...
- python导入excel数据-Python导入数值型Excel数据并生成矩阵操作
riginal_Data 因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理. Import_Data import numpy as np impor ...
- 在Web界面中实现Excel数据大量导入的处理方式
在早期Bootstrap框架介绍中,我的随笔<结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传.预览.提交的导入Excel数据操作流程> ...
- C#将Excel数据表导入SQL数据库的两种方法(转)
最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...
- arcgis导入excel数据_导入Excel数据到ArcGIS属性表的两种实用方法
导入Excel数据到ArcGIS有两种方法,一种是用ArcMap的加载数据(黄色+号那个):另一种是用ArcCatalog直接转为shp文件,两种方法的原理是一样的. 第一种方法 1.Excel数据: ...
- mysql数据库中excel数据的导入与导出
mysql数据库数据与excel数据在python大数据中是比较常见的 在导入导出之前必须先配置好路径权限 1.查看导入导出限制路径 # 查看路径 SHOW VARIABLES LIKE '%secu ...
最新文章
- 缓存区溢出漏洞工具Doona
- c语言用define预处理命令定义,C语言程序设计第八章预处理命令..doc
- leetcode 第 216 场周赛 整理
- oracle如何检查是否rac,Oracle RAC 状态检查
- linux命令——init 的使用用法
- Python爬虫实践: 获取百度贴吧内容
- UVA11351 Last Man Standing【约瑟夫环+数学】
- 循环buffer的实现_Go并发编程-Channel的设计实现
- 老板平常多说点好听的
- CRM及协同办公高保真原型、审批管理、办公申请、工单管理、任务管理、日程管理、工作报告、签到考勤、客户管理、销售线索、商机管理、订单管理、账务管理、统计报表、回款管理、发票管理、报销管理、拜访跟进
- 机器学习算法(一) K-Means算法简述以及在MNIST上的聚类实现
- 好书推荐:创业必看好书排行榜推荐
- 怎样让健康码截图合并一张图片_健康码拼图
- 批量剔除consul无效服务
- assimp批量转模型_IGS模型批量转换成STL模型
- 安全研究 # 课题:二进制成分分析(Binary SCA)
- (转)移动研究院待遇
- mysql 围栏_地理围栏
- NLP实践——基于SIFRank的英文关键短语抽取
- php新闻增删改查操作
热门文章
- LYNC 中文版安装详解-第一部分
- 计算机文档里的圆圈,请问在WORD文档里怎样插入数字上的圆点?
- python 手动读取cifar10_如何用python解析cifar10数据集图片
- Java面向对象-01-类和对象
- [hadoop那些事]hadoop及其组件资源 115/百度云
- CY7C68000 UTMI PHY芯片介绍
- 名额已排到10月 | Apache DolphinScheduler Meetup分享嘉宾继续火热招募中~
- mysql 字符串截取,拼接
- 临床血液学综合练习题库【3】
- 国家计算机一级考试题库百度云,全国计算机一级考试题库