c#操作excel导入导出时同时向用户表插入账户与密码

《》《》《》《》本代码源于师兄《》《》《》《》《》《》
1:首先需要在前端显示界面View视图中添加导入Excel和导出Excel按钮:
@using (Html.BeginForm())
{

}
这里注意,导出Excel是通过获取当下的表单的方式来导出数据的。
2:然后为导入Excel添加导入方法function:
   js部分以图片存放

3:添加点击事件后弹出来的操作界面(importexcel-window):

@using (Html.BeginForm("ImportExcel", "Family", FormMethod.Post, new { enctype = "multipart/form-data" })) //这里"Family"是控制器的名称
{ //"ImportExcel"是控制器中相应方法名称
@Html.AntiForgeryToken()

@T("Excel文件"):

}

4:在控制器端添加导入Excel和导出Excel方法:
[HttpPost]
public ActionResult ImportExcel()
{

if (_workContext.CurrentVendor != null)
return AccessDeniedView();

try
{
var file = Request.Files["importexcelfile"];
if (file != null && file.ContentLength > 0)
{
_importManager.ImportFamiliesFromXlsx(file.InputStream);
}
else
{
ErrorNotification(_localizationService.GetResource("Admin.Common.UploadFile"));
return RedirectToAction("GetFamilyListInfo");
}
SuccessNotification(_localizationService.GetResource("导入成功"));
return RedirectToAction("GetFamilyListInfo");
}
catch (Exception exc)
{
ErrorNotification(exc);
return RedirectToAction("GetFamilyListInfo");
}
}
这里面 _importManager.ImportFamiliesFromXlsx(file.InputStream) 中_importManager是实例化接口并调用接口中的方法ImportFamiliesFromXlsx()

添加成员变量_importManager:private readonly IImportManager _importManager;

接口IImportManager :
public partial interface IImportManager
{
///

/// Import products from XLSX file
///

/// Stream
void ImportFamiliesFromXlsx(Stream stream);
}
IImportManager接口方法的实现:
public partial class ImportManager : IImportManager
{
public void ImportFamiliesFromXlsx(Stream stream)
{

using (var xlPackage = new ExcelPackage(stream))
{ //得到第一个表的工作簿
var worksheet = xlPackage.Workbook.Worksheets.FirstOrDefault();
if (worksheet == null)
throw new NopException("No worksheet found");
         //列的属性
var properties = new[]
{
"户主姓名",

};
    //导入数据时直接向用户表插入密码和账户
var password = "";
var PasswordSalt = "";
switch (_customerSettings.DefaultPasswordFormat)
{
case PasswordFormat.Clear:
{
password = Phone;
}
break;
case PasswordFormat.Encrypted:
{
password = _encryptionService.EncryptText(Phone);
}
break;
case PasswordFormat.Hashed:
{
string saltKey = _encryptionService.CreateSaltKey(5);
PasswordSalt = saltKey;
password = _encryptionService.CreatePasswordHash(Phone, saltKey, _customerSettings.HashedPasswordFormat);
}
break;
default:
break;
}

var customer = new Customer
{
CustomerGuid = Guid.NewGuid(),
Email = Phone + "@GT.com",
Username = Phone,
VendorId = 0,
AdminComment = "",
IsTaxExempt = false,
Password = password,
PasswordSalt = PasswordSalt,
PasswordFormat = _customerSettings.DefaultPasswordFormat,
Active = true,
CreatedOnUtc = DateTime.UtcNow,
LastActivityDateUtc = DateTime.UtcNow,
};
_customerService.InsertCustomer(customer);

//更新角色
var allCustomerRoles = _customerService.GetAllCustomerRoles(true);
foreach (var customerRole in allCustomerRoles)
{
if (customerRole.SystemName == SystemCustomerRoleNames.Registered)
{
customer.CustomerRoles.Add(customerRole);
}
}
_customerService.UpdateCustomer(customer);

//向用户表插入成功

int iRow = 2;//行
while (true)
{
bool allColumnsAreEmpty = true;
if (worksheet.Cells[iRow, 2].Value != null && !String.IsNullOrEmpty(worksheet.Cells[iRow, 2].Value.ToString()))
{
allColumnsAreEmpty = false;
}
if (allColumnsAreEmpty)
break;
string Name = ConvertColumnToString(worksheet.Cells[iRow, GetColumnIndex(properties, "户主姓名")].Value);
//这里主要说明一下在进行相应属性值获取的时候最好跟上面设置列的属性值的顺序一样,为后面进行代码审查的时候节省时间,同时这里面设置的字符串"户主姓名"要与设置列属性的值一样
var group = _groupService.GetAllGroups().FirstOrDefault(m => m.Name == groupExcel.Trim() && m.Village.Name == villageExcel.Trim());//这里如果有表跟表之间的关系的时候需要进行链接查询来获得外键值,否则没有导航就会导入失败,就比如一个村子下面有很多个组,每个组下面又有很多的家庭,这里的_groupService.GetAllGroups()就是进行查询.
if (group == null)
{
break;
}

var family = _familyService.GetAllFamilies().FirstOrDefault(f => f.IDcardnumber == IDcardnumber);//这里的_family.GetAllFamilies()是得到全部的家庭.
bool newFamily = false;
if (family == null)
{
family = new Family();
newFamily = true;
}
family.Name = Name;
family.GroupId = group.Id;//这里组的id值就是我们所需要的外键的值
if (newFamily)
{
_familyService.InsertFamily(family);
}
else
{
_familyService.UpdateFamily(family);
}
//next product
iRow++;
}
}
}
}

导出到excel:

[HttpPost, ActionName("GetFamilyListInfo")]//这里注意这里的ActionName是显示信息列表对应的视图的方法,同时也是导入功能和导出功能所在的视图的方法.
[FormValueRequired("exportexcel-all")]//这里面的值就是前端传回来的"导出Excel"按钮的name的值
public ActionResult ExportExcelAll(FamilyModel model)
{
if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers))
return AccessDeniedView();

var familys = _familyService.GetAllFamilies();//这里是得到全部家庭的信息

try
{
byte[] bytes;
using (var stream = new MemoryStream())
{
_exportManager.ExportFamiliesToXlsx(stream, familys);
bytes = stream.ToArray();
}
return File(bytes, "text/xls", "familys.xlsx");
}
catch (Exception exc)
{
ErrorNotification(exc);
return RedirectToAction("GetFamilyListInfo");
}
}

同样的这里面的_exportManager.ExportFamiliesToXlsx(stream, familys)是实现导出Excel方法的接口并调用方法ExportFamiliesToXlsx()

添加成员变量_exportManager:private readonly IExportManager _exportManager;

IExportManager 接口:
public partial interface IExportManager
{
///

/// Export family list to XLSX
///

/// Stream
/// Customers
void ExportFamiliesToXlsx(Stream stream, IQueryable

时间: 2024-08-18 22:55:14

c#操作excel导入导出时同时向用户表插入账户与密码的相关文章

IIS下发布关于Excel导入导出时遇到的问题集锦(转)

问题描述 1.Excel每个工作薄(sheet)生成记录行数 2.asp.net关于导出Excel的一些问题的集锦 3.下载失败,临时文件或其所在磁盘不可写 4.未能加载文件或程序集"Microsoft.Office.Interop.Excel, Version=14.0.0.0,** 5.IIS下发布操作Excel程序时遇到{00024500-00***即80070005错误 6.System.ComponentModel.Win32Exception: 拒绝访问 有关这这几个问题详解. 问题

【原创】POI操作Excel导入导出工具类ExcelUtil

关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.ThreadLocalMap以当前ThreadLocal为key进行存储,设置一次变量,则其他线程也会有上次数据的残留,因此在addMergeArea方法中进行清空的操作.为了保证原子性, 采用ReentrantLock确保一次只有一个线程可以进行添加合并数据的操作. 线程安全性从以上两个方面保证. 水

.net 自己写的操作Excel 导入导出 类(以供大家参考和自己查阅)

由于现在网页很多都关系到Excel 的操作问题,其中数据的导入导出更是频繁,作为一个菜鸟,收集网上零散的知识,自己整合,写了一个Excel导入到GridView ,以及将GridView的数据导出到EXCEL的类方法,以供参考和方便自己以后查阅. 1 #region 引用部分 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Dat

NOPI操作EXCEL导入导出

private void btnOutput_Click(object sender, EventArgs e) { List<MODEL.Classes> list = cm.GetClassInfo(false); //获取对象数据集合 HSSFWorkbook workbook=new HSSFWorkbook (); //新建Excel工作表 HSSFSheet sheet=workbook.CreateSheet("classes"); //在工作文档中新建页 f

一个基于POI的通用excel导入导出工具类的简单实现及使用方法

前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴.经过思考,认为一百个客户在录入excel的时候,就会有一百个格式版本,所以在实现这个功能之前,所以要统一excel的格式.于是提供了一个通用excel模版的下载功能.当所有客户用模版录入好数据再上传到系统,后端对excel进行解析,然后再持久化到数据库. 概述: 此工具类的几大特点 1.基本导入导出

java poi excel 导入导出数据

背景:1.pringmvc 框架下 的excel 导入导出   2.OI 操作office. 页面代码: <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true"> <div class=&quo

开发指南专题十五:JEECG微云快速开发平台EXCEL导入导出

 开发指南专题十五:JEECG微云快速开发平台EXCEL导入导出 14.EXCEL导入导出 Excel的导入导出抽取通用功能,简化大家对POI的操作,对实体对象进行简单的注解配置就可以完成导入导出,模板的使用更是可以让打造漂亮的Excle报表,从而使大家从重复的工作中解脱出来,更加关注与业务的处理. 14.1注解介绍    注解名 作用对象 描述 是否必须 Excel 字段 对Excel字段的cell属性设置 是 ExcelCollection 字段 对集合对象进行标记表示一对多导出 否 E

java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用! 简单先写一下目录的建立的主要代码,测试用的 List ls = new ArrayList();//报表名称列表  ls.add("BB_BB03");  ls.add("BB_BB05");  ls.add("BB_BB06"); try { 

Mego(04) - NET简单实现EXCEL导入导出

前言 相信做过信息系统的朋友都会遇到EXCEL导入导出的相关开发,做过不少EXCEL导入导出后总结起来大致有如下几种方式实现: ADO.NET的OldDb或ODBC连接EXCEL使用DataTable来读取数据. Microsoft.Office.Interop.Excel用微软提供的组件操作WorkSheet对象. 使用一些第三方的库比如Fast Excel.ExcelDataReader等等. 今天要向大家介绍的更简单的方式来实现日常开发的各种EXCEL导入导出需求. 简单导入 我们还是使用