后端大数据量导出Excel支持百万级以内数据量

news/2025/1/11 5:22:05/

XSSFWorkbook:突破HSSFWorkbook的65535行局限

使用NPOI.XSSF导出,话不多说 直接上代码

导出封装方法,传入datatable数据集

/// <summary>
/// 大数据量
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static MemoryStream ExportDatasetToExcelXSSF(DataTable dt)
{try{//文件流对象MemoryStream stream = new MemoryStream();//打开Excel对象XSSFWorkbook workbook = new XSSFWorkbook();//Excel的Sheet对象NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("sheet1");//set date formatXSSFCellStyle cellStyleDate = (XSSFCellStyle)workbook.CreateCellStyle();//IDataFormat format = workbook.CreateDataFormat();//cellStyleDate.DataFormat = format.GetFormat("yyyy年m月d日");cellStyleDate.BorderBottom = BorderStyle.Thin;cellStyleDate.BorderLeft = BorderStyle.Thin;cellStyleDate.BorderRight = BorderStyle.Thin;cellStyleDate.BorderTop = BorderStyle.Thin;//使用NPOI操作Excel表NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);int count = 0;for (int i = 0; i < dt.Columns.Count; i++) //生成sheet第一行列名 {sheet.SetColumnWidth(i, dt.Columns[i].ColumnName.Length * 4 * 256);NPOI.SS.UserModel.ICell cell = row.CreateCell(count++);cell.SetCellValue(dt.Columns[i].ColumnName);cell.CellStyle = cellStyleDate;}//将数据导入到excel表中for (int i = 0; i < dt.Rows.Count; i++){NPOI.SS.UserModel.IRow rows = sheet.CreateRow(i + 1);count = 0;for (int j = 0; j < dt.Columns.Count; j++){NPOI.SS.UserModel.ICell cell = rows.CreateCell(count++);cell.CellStyle = cellStyleDate;Type type = dt.Rows[i][j].GetType();if (type == typeof(int) || type == typeof(Int16)|| type == typeof(Int32) || type == typeof(Int64)){cell.SetCellValue((int)dt.Rows[i][j]);}else{if (type == typeof(float) || type == typeof(double) || type == typeof(Double)){cell.SetCellValue((Double)dt.Rows[i][j]);}else{if (type == typeof(DateTime)){cell.SetCellValue(((DateTime)dt.Rows[i][j]).ToString("yyyy-MM-dd HH:mm"));}else{if (type == typeof(bool) || type == typeof(Boolean)){cell.SetCellValue((bool)dt.Rows[i][j]);}else{cell.SetCellValue(dt.Rows[i][j].ToString());}}}}}}//保存excel文档sheet.ForceFormulaRecalculation = true;workbook.Write(stream);return stream;}catch{return new MemoryStream();}
}

下载

/// <summary>
/// 导出Excle
/// </summary>
public void DownExcel()
{string BrowserType = Request.Browser.Type;string fileName = "数据导出" + DateTime.Now.ToString("yyMMddHHmmss") + ".xls";MemoryStream ms = InfoDownExcel();byte[] bytesInStream = ms.ToArray();ms.Close();Response.Clear();Response.Buffer = true;Response.Charset = "GB2312";if (BrowserType.Contains("Firefox")){Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);}else{Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8));}Response.ContentType = "application/ms-excel";Response.ContentEncoding = Encoding.GetEncoding("GB2312");Response.BinaryWrite(bytesInStream);Response.End();
}/// <summary>
/// 信息表格导出
/// </summary>
/// <returns></returns>
public MemoryStream InfoDownExcel()
{string queryJson = Request["queryJson"];DataSet ds = App.GetList(queryJson);DataTable dt = new DataTable();//定义行dt.Columns.Add("编号");dt.Columns.Add("名称");DataRow dr;for (int i = 0; i < ds.Tables[0].Rows.Count; i++){dr = dt.NewRow();dr[0] = ds.Tables[0].Rows[i]["code"];dr[1] = ds.Tables[0].Rows[i]["name"];dt.Rows.Add(dr);}MemoryStream ms = ExportTool.ExportDatasetToExcelXSSF(dt);return ms;
}

http://www.ppmy.cn/news/666650.html

相关文章

修改POI源码,优化百万级大数据量Excel导出

一、问题背景 最近在做项目大数据量Excel导出时&#xff0c;有前端反馈响应速度很慢&#xff0c;基本表现为前端页面触发请求之后&#xff0c;过了很长时间才会在浏览器页面弹出下载文件的窗口&#xff0c;而且响应时间会随着数据量的递增成正比。 注&#xff1a;目前项目中涉…

POI 实现word(doc/docx)与excel(xls/xlsx)浏览器预览

POI 实现word(doc/docx)与excel&#xff08;xls/xlsx&#xff09;浏览器预览 一、环境准备 1.jdk&#xff1a;1.8 2.maven&#xff1a;3.6 3.springboot&#xff1a;2.2.2 二、MAVEN主要依赖 <dependency><groupId>org.apache.poi</groupId><artifac…

基于vue解决大数据表格卡顿问题

点我在线体验Demo(请用电脑查看) 亲测苹果电脑&#xff0c;chrome浏览器无卡顿现象&#xff0c;其它浏览器并未测试&#xff0c;如遇到卡顿请备注系统和浏览器&#xff0c;方便我后续优化&#xff0c;谢谢 先看一下效果,一共1000 X 100 10W个单元格基本感受不到卡顿&#xff0…

基于Vue3+ECharts5+datav的疫情数据可视化大屏/地图项目

本项目是一个基于Vue3ECharts5datav打造的一个每日疫情数据大屏可视化开源项目&#xff1b;通过nginx部署在阿里云服务器上 效果展示 在线预览地址&#xff1a;http://lj520zz.top/ 服务器已过期 请大家动动手点点star 项目前台源码地址&#xff1a;https://github.com/qdfud…

vue大数据表格解决方案的比较

前言 近些年公司一直采用vue2.xElement UI进行开发&#xff0c;对于Element UI&#xff0c;由于起步较早&#xff0c;相关的生态一直比较成熟&#xff0c;各种问题在某度上也能找到比较完美的解决方案&#xff0c;最最重要的一点是bug也比较少。 凡是总有个但是&#xff1a;&a…

POI百万级大数据量EXCEL导出

一. 简介 excel导出&#xff0c;如果数据量在百万级&#xff0c;会出现俩点内存溢出的问题&#xff1a; 1. 查询数据量过大&#xff0c;导致内存溢出。 该问题可以通过分批查询来解决&#xff1b; 2. 最后下载的时候大EXCEL转换的输出流内存溢出&#xff1b;该方式可以通过新版…

城市POI数据爬取-百度地图版

1 API说明 目前百度地图的最新版为地图检索V2.0服务。详细介绍可以通过开发文档-web服务Api-地点检索V2.0获取。 在使用API前需要提前注册账号获取ak。对于免费账号&#xff1a;目前的每日访问次数是100次&#xff0c;最多可以获取2000条数据。 如不需讲解仅需要下载代码&am…

使用Java导出Excel表格并由浏览器直接下载——基于POI框架

目录 背景描述 技术准备 导出Excel——尝鲜版 导出Excel——封装版(通过反射) 导出Excel——深度封装&#xff08;设置下拉选项&#xff09; 扩展——多个列分别是不同的下拉选项怎么封装 2019-10-28 更新&#xff0c;必看&#xff01;&#xff01;&#xff01; 2019-1…