博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC中Excel数据的导入与导出
阅读量:5280 次
发布时间:2019-06-14

本文共 4825 字,大约阅读时间需要 16 分钟。

在平时的系统后台管理系统中会有很多的数据导入与导出,而这个时候兼容性很好的Excel表格就成了首选。而这个导入与导出成了一个很常见的问题,下边就解释一下我用的这一个,希望适合你呀。

一、导入

先看效果图(请忽略我的行内编辑):

这里写图片描述

这是一个效果图,接下来直接就上代码了。

先看前台吧。

@* 
*@ @using (Html.BeginForm("Import", "ExcelText",FormMethod.Post, new { enctype = "multipart/form-data" })) {
}@*
*@

这是弹出的表格。用Form表单也行,我用的是USing,都可以。

function ExcelIn() {
$("#dptdialog").dialog({ title: "导入Excel" }); $("#dptdialog").dialog("open"); } function AddExcel() {
$('#dptdialog form').form('submit', { url: '@Url.Action("Import")', success: function (data) {
$("#custromList").datagrid("load"); $('#dptdialog form').form("reset"); } }); $('#dptdialog').dialog("close"); }

表单上传调用的方法和按钮的方法。可以自己改,自己写,我只是提供一个思路。

接下来是重点,后台的代码问题。

public ActionResult Import()        {            string msg = "导入失败";   HttpPostedFileBase file = Request.Files["excel"];   //1、先保存上传的excel文件(这一步与上传图片流程一致)string extName =Path.GetExtension(file.FileName).ToLower();string newFileName = System.Guid.NewGuid().ToString();string path = Server.MapPath("~/Files/");file.SaveAs(path + newFileName + extName); //2、读取excel文件(通过oledb将excel数据填充到datatable) //HDR=Yes,这代表第一行是标题,不做为数据使用,IMEX的含义(0:写入,1:读取,2:读取与写入) string filePath = path + newFileName + extName;//必须是物理路径string conStr ="Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" + filePath + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";OleDbDataAdapter adp = new OleDbDataAdapter("select * From[Sheet1$]", conStr);             //默认读取的Sheet1,你也可以把它封装变量,动态读取你的Sheet工作表            DataTable dt = new DataTable();            adp.Fill(dt);            //3、将table转化成list            List
list = new List
(); if (dt.Rows.Count > 0) { foreach (DataRow item in dt.Rows) { list.Add(new Customer() { //有哪个写哪个 C_name = item["姓名"].ToString(), C_age = item["年龄"].ToString(), C_date = Convert.ToDateTime(item["出生年月"]), }); } } //4、跨action传值用tempdata //TempData["list"] = list; //return RedirectToAction("List"); //如果不直接导入数据库这里不用写 Customer model = new Customer(); for (int i = 0; i < list.Count;i++ ) { model.C_age = list[i].C_age; model.C_name = list[i].C_name; model.C_date = list[i].C_date; if (Bll.Add(model)) { msg = "导入成功!"; } } return Json(msg); }

上边很多内容都加了注释了,应该比较清楚,只是可能CSDN的代码排序有点问题。最后的添加到数据库可以不用,我只是为了让他可以直接添加到数据库。

1、MVC中上传文件类型HttpPostedFileBase
2、SaveAs保存上传文件内容
3、forea循环的是数据表中的列。进行每一列的上传。

二、导出

ajax貌似不能进行Excel数据导出,所以我才用了window.location.href,同步操作。当然表单提交也是可以的。

首先我的方法用到了NPOI第三方组件,这个自己导入就可以了。

先书写后台

public ActionResult ExportByNPOI()        {            //1、获取数据源(List变量)var list=Bll.Search(x=>true).Select(x=>new{
x.C_age,x.C_date,x.C_name,x.ID}).ToList();//2、创建Excel文件的对象NPOI.HSSF.UserModel.HSSFWorkbook excel = new NPOI.HSSF.UserModel.HSSFWorkbook(); //添加一个sheet NPOI.SS.UserModel.ISheet sheet = excel.CreateSheet("Sheet1"); //给sheet1添加标题行 NPOI.SS.UserModel.IRow head = sheet.CreateRow(0); head.CreateCell(0).SetCellValue("编号"); head.CreateCell(1).SetCellValue("姓名"); head.CreateCell(2).SetCellValue("年龄"); head.CreateCell(3).SetCellValue("出生年月"); //将数据逐步写入sheet1各个行 for (int i = 0; i < list.Count; i++) { NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 1); row.CreateCell(0).SetCellValue(list[i].ID); row.CreateCell(1).SetCellValue(list[i].C_name); row.CreateCell(2).SetCellValue(list[i].C_age); row.CreateCell(3).SetCellValue(list[i].C_date.Value.ToString("yyyy-MM-dd"));//对时间格式进行一下初始化。 } // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); excel.Write(ms); ms.Seek(0, SeekOrigin.Begin); return File(ms, "application/vnd.ms-excel", "顾客信息表.xls"); }

该注释的我都已经加了注释,相信都可以明白的命名之类的就不要在意了,随便写的。

接下来看前台

function GetExcel() {
//window.location.href刷新当前页面,当前页面打开URL页面,同步提交 window.location.href = "@Url.Action("ExportByNPOI")";}

就一个接受后台方法的时间,然后引入到前台代码就好了,是不是很简单呢。



欢迎关注点赞哦。

转载于:https://www.cnblogs.com/Grant-Fu/p/7412969.html

你可能感兴趣的文章
站立会议第四天
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>