分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

asp.net NPOI导出xlsx格式文件,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

发布时间:2023-09-06 01:20责任编辑:郭大石关键词:暂无标签

NPOI导出xlsx格式文件,会出现如下情况:

点击“是”:

导出代码如下:

/// <summary> ???????/// ????将datatable数据写入excel并下载 ???????/// </summary> ???????/// <param name="dt">datatable </param> ???????/// <param name="excelName">文件名</param> ???????/// <param name="templatePath">模板路径</param> ???????/// <returns></returns> ???????public static void DataTableToExcelAndDownload(DataTable dt, string excelName, string templatePath) ???????{ ???????????IWorkbook workbook = null; ???????????FileStream fs = null; ???????????IRow row = null; ???????????ISheet sheet = null; ???????????ICell cell = null; ???????????ICellStyle cellStyle = null; ???????????try ???????????{ ???????????????if (dt != null && dt.Rows.Count > 0) ???????????????{ ???????????????????var rowCount = dt.Rows.Count; //行数 ???????????????????var columnCount = dt.Columns.Count; //列数 ???????????????????using (fs = File.OpenRead(templatePath)) ???????????????????{ ???????????????????????//大批量数据导出的时候,需要注意这样的一个问题,Excel2003格式一个sheet只支持65536行,excel 2007 就比较多,是1048576 ???????????????????????//workbook = new HSSFWorkbook(fs);//2003版本.xls ???????????????????????workbook = new XSSFWorkbook(fs); // 2007版本.xlsx ???????????????????} ???????????????????if (workbook != null) ???????????????????{ ???????????????????????sheet = workbook.GetSheetAt(0); //读取第一个sheet ???????????????????????//设置每行每列的单元格, ???????????????????????for (var i = 0; i < rowCount; i++) ???????????????????????{ ???????????????????????????row = sheet.CreateRow(i + 1); ???????????????????????????for (var j = 0; j < columnCount; j++) ???????????????????????????{ ???????????????????????????????cell = row.CreateCell(j); ???????????????????????????????var value = dt.Rows[i][j]; ???????????????????????????????var bdType = value.GetType().ToString(); ???????????????????????????????switch (bdType) ???????????????????????????????{ ???????????????????????????????????case "System.String": ???????????????????????????????????????cell.SetCellValue(value.ToString()); ???????????????????????????????????????break; ???????????????????????????????????case "System.DateTime": //日期类型 ????????????????????????????????????????cell.SetCellValue( ???????????????????????????????????????????Convert.ToDateTime(value.ToString()).ToString("yyyy-MM-dd HH:mm:ss")); ???????????????????????????????????????break; ???????????????????????????????????case "System.Int16": //整型 ??????????????????????????????????????case "System.Int32": ???????????????????????????????????case "System.Int64": ???????????????????????????????????case "System.Byte": ???????????????????????????????????????var intV = 0; ???????????????????????????????????????int.TryParse(value.ToString(), out intV); ???????????????????????????????????????cell.SetCellValue(intV); ???????????????????????????????????????break; ???????????????????????????????????case "System.Decimal": //浮点型 ??????????????????????????????????????case "System.Double": ???????????????????????????????????????double doubV = 0; ???????????????????????????????????????double.TryParse(value.ToString(), out doubV);//格式化值 ???????????????????????????????????????cellStyle = workbook.CreateCellStyle(); ???????????????????????????????????????cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00"); ???????????????????????????????????????cell.SetCellValue(doubV); ???????????????????????????????????????cell.CellStyle = cellStyle; ???????????????????????????????????????????????????????????????????????????????break; ???????????????????????????????????default: ???????????????????????????????????????cell.SetCellValue(value.ToString()); ???????????????????????????????????????break; ???????????????????????????????} ???????????????????????????} ???????????????????????} ???????????????????????var context = HttpContext.Current; ???????????????????????context.Response.Clear(); ???????????????????????context.Response.ContentType = "application/vnd.ms-excel"; ???????????????????????context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + excelName); ???????????????????????using (var ms = new MemoryStream()) ???????????????????????{ ???????????????????????????workbook.Write(ms); ???????????????????????????long fileSize = ms.Length; ???????????????????????????//加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃” ???????????????????????????context.Response.AddHeader("Content-Length", fileSize.ToString()); ???????????????????????????context.Response.BinaryWrite(ms.GetBuffer()); ???????????????????????????context.ApplicationInstance.CompleteRequest(); ???????????????????????} ???????????????????} ???????????????} ???????????} ???????????catch (Exception ex) ???????????{ ???????????????if (fs != null) ???????????????{ ???????????????????fs.Close(); ???????????????} ???????????????ExceptionHandling.ExceptionHandler.HandleException(ex); ???????????} ???????}

加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

long fileSize = ms.Length;
???????????????????????????context.Response.AddHeader("Content-Length", fileSize.ToString());

即可。

asp.net NPOI导出xlsx格式文件,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”

原文地址:http://www.cnblogs.com/qk2014/p/7729215.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved