NPOI大数据量多个sheet导出源码(原)

#region  NPOI大数据量多个sheet导出

/// <summary>
        /// 大数据量多个sheet导出
        /// </summary>
        /// <typeparam name="T">数据源实体类</typeparam>
        /// <param name="objList">数据源</param>
        /// <param name="fileName">文件名称</param>
        /// <param name="btyBytes">导出数据流</param>
        /// <param name="columnInfo">显示列对应数据字典</param>
        /// <param name="listCount">每个sheet包含数据条数</param>
        /// <returns></returns>
        public static bool ExportExcelTest<T>(List<T> objList, string fileName, ref byte[] btyBytes, Dictionary<string, string> columnInfo = null,int listCount=10000)
        {
            bool bResult = false;
            //在内存中生成一个Excel文件:
            HSSFWorkbook book = new HSSFWorkbook();
            if (objList != null && objList.Count > 0)
            {
                double sheetCount = Math.Ceiling((double)objList.Count / listCount);
                for (int i = 0; i < sheetCount; i++)
                {
                    ISheet sheet = null;
                    sheet = book.CreateSheet("sheet" + i);
                    sheet.DefaultRowHeight = 20 * 10;
                    List<T> list = new List<T>();
                    list = objList.Skip<T>(listCount * i).Take<T>(listCount).ToList();

int rowIndex = 0;
                    int StartColIndex = 0;
                    int colIndex = StartColIndex;

//创建表头样式
                    ICellStyle style = book.CreateCellStyle();
                    style.Alignment = HorizontalAlignment.Center;
                    style.WrapText = true;
                    IFont font = book.CreateFont();
                    font.FontHeightInPoints = 16;
                    font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
                    font.FontName = "简体中文";
                    style.SetFont(font);//HEAD 样式

Type myType = null;
                    myType = objList[0].GetType();
                    //根据反射从传递进来的属性名信息得到要显示的属性
                    List<PropertyInfo> myPro = new List<PropertyInfo>();
                    PropertyInfo[] properties = myType.GetProperties();

#region 定义表头
                    int m = 0;
                    if (columnInfo != null)
                    {
                        var rowheader = sheet.CreateRow(0);
                        rowheader.Height = rowheader.Height = 20 * 20;
                        foreach (string cName in columnInfo.Keys)
                        {
                            PropertyInfo p = myType.GetProperty(cName);
                            if (p != null)
                            {
                                myPro.Add(p);
                                rowheader.CreateCell(m).SetCellValue(columnInfo[cName]);
                                m++;
                            }
                        }
                    }
                    #endregion
                    #region 定义表体并赋值
                    //如果没有找到可用的属性则结束
                    if (myPro.Count == 0) { return bResult; }
                    foreach (T obj in list)
                    {
                        int n = 0;
                        if (sheet != null)
                        {
                            rowIndex++;
                            var sheetrow = sheet.CreateRow(rowIndex);
                            sheetrow.Height = sheetrow.Height = 20 * 20;
                            foreach (PropertyInfo p in myPro)
                            {
                                dynamic val = p.GetValue(obj, null) ?? "";
                                string valtype = val.GetType().ToString();
                                if (valtype.ToLower().IndexOf("decimal", StringComparison.Ordinal) > -1)
                                {
                                    val = Convert.ToDouble(val);
                                }
                                else if (valtype.ToLower().IndexOf("datetime", StringComparison.Ordinal) > -1)
                                {
                                    val = val.ToString("yyyy-MM-dd HH:mm:ss");
                                    if (val.Equals("0001-01-01 00:00:00"))
                                    {
                                        val = "";
                                    }
                                }
                                sheetrow.CreateCell(n).SetCellValue(val);
                                n++;
                            }
                        }

}
                    #endregion
                }
            }
            else
            {
                //在工作薄中建立工作表
                HSSFSheet sheet = book.CreateSheet() as HSSFSheet;
                sheet.SetColumnWidth(0, 30 * 256);
                if (sheet != null) sheet.CreateRow(0).CreateCell(0).SetCellValue("暂无数据!");
            }

try
            {
                HttpResponse rs = System.Web.HttpContext.Current.Response;
                rs.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                rs.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
                rs.ContentType = "application/ms-excel";
                using (MemoryStream ms = new MemoryStream())
                {
                    book.Write(ms);
                    rs.BinaryWrite(ms.ToArray());
                    ms.Flush();
                }
            }
            catch (SystemException ex)
            {
                LogHelper.Write(ex);
            }
            catch (ApplicationException ex)
            {
                LogHelper.Write(ex);
            }
            return bResult;
        }

#endregion

时间: 2024-10-29 08:45:18

NPOI大数据量多个sheet导出源码(原)的相关文章

大数据技术之_19_Spark学习_06_Spark 源码解析小结

========== Spark 通信架构 ========== 1.spark 一开始使用 akka 作为网络通信框架,spark 2.X 版本以后完全抛弃 akka,而使用 netty 作为新的网络通信框架.最主要原因:spark 对 akka 没有维护,需要 akka 更新,spark 的发展受到了 akka 的牵制,akka 版本之间无法通信,即 akka 兼容性问题.2.RpcEnv:RPC 上下文环境,每个 Rpc 端点运行时依赖的上下文环境称之为 RpcEnv.类似于 SparkC

云帆大数据学院_hadoop 2.2.0源码编译

2.1下载地址 1.ApacheHadoop(100%永久开源)下载地址: - http://hadoop.apache.org/releases.html - SVN:http://svn.apache.org/repos/asf/hadoop/common/branches/ 2.CDH(ClouderaDistributed Hadoop,100%永久开源)下载地址: - http://archive.cloudera.com/cdh4/cdh/4/(是tar.gz文件!) - http:

MYSQL数据库导入大数据量sql文件失败的解决方案

1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和数据"  .保存文件db_mras.sql文件. 2.导入sql文件.在MYSQL中新建数据库db_mras.选择数据库-----右击选择"运行SQL文件"-----选择文件db_mras.sql,运行. 现在发现运行失败,提示错误"MySQL server has g

java 导出Excel 大数据量

出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; background-color: #ffffff;">XLSX</span>,2007版本的excel,每个sheet无6.5W的行数限制,但是到了一定数量,可能内存溢出, * 次方法适合在预计10W以下的数据导出时使用,本机测试,14W可以导出.列数量在8列左右 * * @param

导出查询数据(大数据量)

1.右击数据库,"任务"--"导出数据" 2.向导页点击"下一步",然后录入登陆信息,再点击"下一步" 3.选择导出类型及路径,然后点击"下一步"(如:Excel文档) 4.选择数据源,直接从表或试图中导出,或者通过sql语句查询导出,然后"下一步".(此处sql查询为例) 5.录入查询语句,然后"下一步"(可分析sql语句是否有效) 6.之后的步骤就是一路"

mysql innobackupex xtrabackup 大数据量 备份 还原(转)

原文:http://blog.51yip.com/mysql/1650.html 作者:海底苍鹰 大数据量备份与还原,始终是个难点.当MYSQL超10G,用mysqldump来导出就比较慢了.在这里推荐xtrabackup,这个工具比mysqldump要快很多. 一.Xtrabackup介绍 1,Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtra

POI读写大数据量EXCEL

大数据量的excel一般都是.xlsx格式的,网上使用POI读写的例子比较多,但是很少提到读写非常大数据量的excel的例子,POI官网上提到XSSF有三种读写excel,POI地址:http://poi.apache.org/spreadsheet/index.html.官网的图片: 可以看到有三种模式: 1.eventmodel方式,基于事件驱动,SAX的方式解析excel(.xlsx是基于OOXML的),CPU和内存消耗非常低,但是只能读不能写 2.usermodel,就是我们一般使用的方

sqlserver 大数据量的insert、delete操作优化

http://blog.csdn.net/lanyuzhen/article/details/7547476 --大批量导出orders表:insert DBCC DROPCLEANBUFFERS  DBCC FREEPROCCACHE goSET NOCOUNT ON BEGIN TRANSACTION  INSERT INTO test.dbo.orders with(tablock) SELECT * FROM bak.dbo.OrdersWHERE ordertime BETWEEN '

Sql server 大数据量插入速度慢或丢失数据解决办法

问题描述:我的设备每秒2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,找了好多解决方法,整理了两种效果比较明显的解决办法: 第一种:使用Sql Server函数: 1.将数据组合成字串,使用函数将数据插入内存表,后将内存表数据复制到要插入的表. 2.组合成的字符换格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|