导出数据到Excel 2007 多个Sheet页(NPOI)(web版)

后台代码:

public static string Export2007<T>(IList<T> sourceData)
        {
            if (sourceData == null) throw new ArgumentNullException("sourceData");

            IWorkbook workbook = new XSSFWorkbook();
            var properties = TypeDescriptor.GetProperties(typeof(T));

            //一个Sheet导出的记录数
            const int pageSize = 20000;
            //记录总数
            var rowCount = sourceData.Count;
            //总Sheet数
            var pageCount = (rowCount + pageSize - 1) / pageSize;
            var count = 1;
            while (count <= pageCount)
            {
                var list = count == 1
                    ? sourceData.Skip(0).Take(pageSize).ToList()
                    : sourceData.Skip((count - 1)*pageSize).Take(pageSize).ToList();

                if (list.Any())
                {
                    var sheet = workbook.CreateSheet(String.Format("Sheet{0}", count));
                    var row = sheet.CreateRow(0);

                    for (var i = 0; i < properties.Count; i++)
                    {
                        var cell = row.CreateCell(i);
                        cell.SetCellValue(String.IsNullOrEmpty(properties[i].Description)
                            ? properties[i].Name
                            : properties[i].Description);
                    }

                    for (var i = 0; i < list.Count; i++)
                    {
                        row = sheet.CreateRow(i + 1);

                        for (var j = 0; j < properties.Count; j++)
                        {
                            var cell = row.CreateCell(j);

                            var value = properties[j].GetValue(list[i]);

                            cell.SetCellValue(value == null ? String.Empty
                                : (value is DateTime ? ((DateTime)value).ToString("yyyy-MM-dd HH:mm") : value.ToString()));
                        }
                    }
                }

                count++;
            }
            var dir =
                HttpContext.Current.Server.MapPath(String.Format("~/Resources/{0}/", DateTime.Now.ToString("yyyyMMdd")));

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            var fileName = dir + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";

            var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            workbook.Write(fileStream);
            return fileName;
        }

前台代码:

public ActionResult ExportExecl(int? pid)
        {
            if (!pid.HasValue) return null;

            var list = _userinfoBo.GetAnswerByUser(pid.Value);

            if (null == list) return null;

            var newList = list.Select(question => new ResultExecl()
            {
              //加载数据
            }).ToList();

            var filePath = ExcelUtil.Export2007(newList);

            var fileName = Path.GetFileName(filePath);

            return File(filePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
        }
时间: 2024-08-18 06:58:34

导出数据到Excel 2007 多个Sheet页(NPOI)(web版)的相关文章

导出数据到Excel方法总结

导出数据到Excel方法总结 一,问题的提出 近来在网上经常有人问怎样把数据导出到Excel中?针对这个问题网上也有很多资料.大都比较的琐碎.本人当前从事的项目中,刚好涉及到这些内容.就顺便做了一些归纳整理.共享给大家.避免大家再花费很多时间研究这个老生长谈的问题. 二,解决方法 1.       用NPOI导出数据到Excel. 简介:NPOI是一个开源的dotnet类库,官方网站:http://npoi.codeplex.com/. 优点:支持Excel 2003格式,读写速度快,基于.NE

Dynamics CRM导出数据到Excel

原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM将数据导出到Excel的功能. (一)导出数据到Excel的三种类型 下图中点击红框内的按钮EXPORT TO EXCEL,会弹出三个选项 第一个是一个静态工作表,将当前页面内的数据导出到一张表内.该数据是静态的,也就是说CRM里的数据发生改变,工作表的数据不会发生相应修改.如果勾选了”Make t

Delphi 导出数据至Excel的7种方法【转】

转自:http://blog.csdn.net/zang141588761/article/details/52275948 一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean; const xlNormal=-4143; var y : integer; tsList : TStringList; s,filename :string; a

NPOI导出数据到Excel

NPOI导出数据到Excel 前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作. 方法 先去官网:http://npoi.codeplex.com/下载需要

java代码导出数据到Excel、js导出数据到Excel(三)

jsp内容忽略,仅写个出发按钮: <button style="width: 100px" onclick="expertExcel()" >JS导出Excel</button>           <button style="width: 100px" onclick="expertWord()" >JS导出Word</button>           <button

asp.net使用MVC4框架基于NPOI做导出数据到Excel表

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本

delphi导出数据至Excel的七种方法及比较

一;delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean;const      xlNormal=-4143;var    y     :  integer;    tsList :  TStringList;    s,filename  :string;    aSheet  :Variant;    excel :OleVariant;   

C#导出数据至excel模板

开源分享最近一个客户要做一个将数据直接输出到指定格式的Excel模板中,略施小计,搞定 其中包含了对Excel的增行和删行,打印预览,表头,表体,表尾的控制 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using System.Reflection; using System

python从mysql导出数据导excel

# coding:utf8 import sys reload(sys) sys.setdefaultencoding('utf8') # author: 'zkx' # date: '2018/3/11' # Desc:从数据库中导出数据到excel数据表中 #已封装,可以直接使用,只需更改sql语句即可 import xlwt import MySQLdb def export(host,user,password,dbname,table_name,outputpath): conn =