MVC批量导出数据方法

近段时间做了个数据平台,其中涉及到批量导出CSV格式数据的业务,主要使用了部分视图和视图之间传值等知识点,今天做了下整理,特此分享下:

主要分为四步:

1:要打印的数据格式陈列View;

2:自定义导出表头View呈现,在通过 @{Html.RenderAction(string actionName,object routeValues);}将步骤1的数据整合进来;

3:导出页面调用通用的导出方法,通过传参数,传视图名,获取到要导出的数据;

4:导出成指定格式数据。

下面开始说明详细导出流程,为了便于理解,从导出页面开始:

导出页面,已经查询到符合条件的所有数据了,然后这是导出按钮响应的操作:点击按钮【导出CSV】调用Export_DataInfo方法,如下所示

通用导出方法 Export_Datainfo :

通用方法中的RenderPartialViewTostring和ExportCSV方法:

-------------------------------------------------------------------------华丽分割线-------------------------------------------------------------

附件:

DayData_OutPutData:

@{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("日期").Append(",").Append("列名1").Append(",,").Append("列名").Append(",,").Append("列名2").Append(",,")
        .Append("列名3").Append(",,,,,,").Append("列名4").Append(",,,,,,,,").Append("列名5").Append(",,,,").Append("\n");

    sb.Append(",").Append("列名6").Append(",").Append("列名7")
        .Append(",").Append("列名8").Append(",").Append("列名9")
        .Append(",").Append("列名10").Append(",").Append("列名11")
        .Append(",").Append("列名12").Append(",").Append("列名13").Append(",").Append("列名14").Append(",").Append("列名15").Append(",").Append("列名16").Append(",").Append("列名17")

        .Append(",").Append("列名18").Append(",").Append("列名19").Append(",").Append("列名20").Append(",").Append("列名21").Append(",").Append("列名22").Append(",").Append("列名23").Append(",").Append("列名24").Append(",").Append("列名25")
        .Append(",").Append("列名26").Append(",").Append("列名27").Append(",").Append("列名28").Append(",").Append("列名29")
        .Append("\n");
            @sb.ToString()
                }
@{Html.RenderAction("OutPutData_DayData", new
  {
      gameId = (int)ViewData["gameId"],
      startdate = (string)ViewData["startdate"],
      enddate = (string)ViewData["enddate"],
      pageNum = 1,
      pageSize = 20,
      types = (string)ViewData["types"],
  });}

导出公共方法:

        /// <summary>
        /// 通用导出方法
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Export_DataInfo(int gameId, string partialViewName, string startdate, string enddate, string fileName, string types, int dataType = 1)
        {
            Game game = gamebll.getGameById(gameId);
            string text = "";
            /* RenderPartialViewToString 将视图内容转化成string */
            text = RenderPartialViewToString(this, partialViewName, gameId, startdate, enddate, dataType, types);
            /* 将string导出成指定格式 */
            return ExportCSV(text, "application/ms-excel", game.Name + fileName);
        }

导出实现方法:

        /// <summary>
        /// 将视图内容转换成string
        /// </summary>
        /// <returns></returns>
        protected string RenderPartialViewToString(Controller controller,string partialViewName,int gameId,string startdate,string enddate,int dataType,string types)
        {
            IView view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialViewName).View;
            ViewDataDictionary dicts =new ViewDataDictionary();
            dicts.Add("gameId", gameId);
            dicts.Add("startdate",startdate);
            dicts.Add("enddate", enddate);
            dicts.Add("dataType", dataType);//道具取前20位时,用来区别 日、周、月
            dicts.Add("types", types);
            using (System.IO.StringWriter writer = new System.IO.StringWriter())
            {
                ViewContext viewContext = new ViewContext(controller.ControllerContext, view, dicts, controller.TempData, writer);
                viewContext.View.Render(viewContext, writer);
                return writer.ToString();
            }
        }
        /// <summary>
        /// 导出方法
        /// </summary>
        /// <returns></returns>
        public ActionResult ExportCSV(string contentStr, string contentType, string fileName)
        {
            byte[] fileContents = System.Text.Encoding.Default.GetBytes(contentStr);
            var fileStream = new System.IO.MemoryStream(fileContents);

            return File(fileStream, contentType, System.Web.HttpContext.Current.Request.Browser.Browser.ToUpper() == "FIREFOX" ? fileName : Server.UrlEncode(fileName));
        }

时间: 2024-10-17 16:09:45

MVC批量导出数据方法的相关文章

C# 批量插入数据方法

批量插入数据方法 void InsertTwo(List<CourseArrangeInfo> dtF) { Stopwatch watch = new Stopwatch(); watch.Start(); DataTable dt = new DataTable();//准备存放数据的临时表 //构造表的列 dt.Columns.Add("ShoppingCartID"); dt.Columns.Add("Produce_ID"); dt.Colum

POI批量导出数据

public class FileZip { /** * * @param srcfile 文件名称数组 * @param zipfile 压缩后文件 */ public static void ZipFiles(File[] srcfile, File zipfile) { byte[] buf = new byte[1024]; try { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipfile)); f

中国菜刀批量导出数据

scripthost = wscript.fullname scripthost = right(scripthost, 11) if not (ucase(scripthost) = "CSCRIPT.EXE") then set ws=Create("wscript.shell") ws.run "cscript /nologo "&""""&wscript.scriptfullname

oracle多种导入导出数据方法

dmp格式: 1.dmp格式的导出可以通过客户端工具(PL/SQL)操作来完成,通过菜单栏---->Tools---->Export Tables,然后设置勾选相应参数即可,rows代表是否连同数据一起导出 2.导出还可以用cmd工具,速度也更快: exp user/[email protected] file=d:\***.dmp full=y full=y表示全导出,如果只想导出某个用户的表,用owner参数 owner=(ownername1,ownername2) 如果只想导出某几张表

asp.net MVC Views-----Controller传递数据方法

1.ViewData:C传递数据到V中:ViewData["studentList"]=studentList; V接收C传来的数据:var stu=(Student)ViewData["studentList"]; 2.ViewBag:C---------->V:ViewBag._product=p; 接收:var p=(product)ViewBag._product; 3.model:C--------------V:return View(p); 接收

使用PHPExcel实现数据批量导出为excel表格

首先需要下载PHPExecel类文件,帮助文档可以参考PHPExcel中文帮助手册|PHPExcel使用方法. 下面直接上例子,是我自己写的一个简单的批量导出数据为excel的例子 前台页面 比较简单,就是一个超链接,跳转到处理页面,超链接也可以跟一些参数(看需求)! <a href="./Process1.php">导出excel表格</a> 后台Process.php页面 /** * 批量导出数据 * @param $arr 从数据库查询出来,即要导出的数据

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult 导出EXCEL方法总结:MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可:优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件: 2.设置输出头为:application/ms-excel,再输出拼接的HTM

.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法)

.Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public class ExcelController : Controller { // // GET: /Excel/ Models.zbwxglEntities myMdl = new Models.zbwxglEntities(); /// <summary> /// 第一种方法,利用文件输出流进行读写操作 /// <