asp.net NPOI导出xlsx格式文件,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
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 > )
{
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(); //读取第一个sheet //设置每行每列的单元格,
for (var i = ; i < rowCount; i++)
{
row = sheet.CreateRow(i + );
for (var j = ; 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 = ;
int.TryParse(value.ToString(), out intV);
cell.SetCellValue(intV);
break;
case "System.Decimal": //浮点型
case "System.Double":
double doubV = ;
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 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”的更多相关文章
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
- C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
报错信息: 最近打开下载的 Excel,会报如下错误.(xls 格式不受影响) 解决方案: 下载代码(红色为新添代码) public void download() { string fileName ...
- NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题
1.今天再处理Excel2007.2010文件,格式.xlsx文件存在一个问题,在调用 Write方法之后关闭了传入的文件流. 2.今天针对此问题好一顿的测试: 2.1 在有文件构建时不是.xlsx文 ...
- 十七 bootstrap-table tableExport 导出xlsx格式表格
原文:十七 bootstrap-table tableExport 导出xlsx格式表格 在[十六.bootstrap-table javascript导出数据]中,打开导出的表格时,总会弹出一个提示 ...
- 解决双击excel文件打开多个excel.exe进程的问题
解决双击excel文件打开多个excel.exe进程的问题有些时候,双击两个excel文件,会打开多个excel进程,不同进程之间不能复制粘贴公式,只能粘贴数值,很不方便.怎么样双击多个excel文件 ...
- 手写OOXML文档——导出xlsx格式表格文档
一.准备工作: 2个js库,另外把样式文件抽离出来 require('file-saver'); import JSZip from 'jszip' import {stylesData,theme1 ...
- Npoi导出xlsx
xlsx文件可以超出,excel2003行数限制.必要的dll文件. public void Export() { string filename = Request["searchStri ...
- Vue+element 实现文件导出xlsx格式
傻瓜教程: 第一步:安装两个依赖包 npm install --save xlsx file-saver 第二步:建立一个Vue文件,导入以下代码即可 <template> <d ...
- asp.net mvc用aspose.cells 导出xlsx格式的excel。无残留
public void Export() { HttpResponse Response = System.Web.HttpContext.Current.Response; // Load your ...
随机推荐
- Effective Java 第三版——88. 防御性地编写READOBJECT方法
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- window.print控制打印样式
我们可能会去使用window.print()方法来打印页面,但是当我们遇到需要改变打印时候的字体大小等css样式的时候你可能会懵逼. 所以搜索成了我们的必经之路,我相信在网上搜索出来的最好的答案就是使 ...
- RabbitMQ 特性
1RabbitMQ 特点 与 SpringAMQP 完美整合.API 丰富. 集群模式丰富,表达式配置,HA 模式,镜像队列模型. 保证数据不丢失的前提做到高可靠性.可用性.
- 修复android 5.0 Xutils的框架问题retry error, curr request is null
Android 5.0手机对xUtils-2.6.13.jar请求时会出现retry error, curr request is null 情况, 修复解决方式: 找到library/src/com ...
- springmvc(二) ssm框架整合的各种配置
ssm:springmvc.spring.mybatis这三个框架的整合,有耐心一步步走. --WH 一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后 ...
- [k8s]debug模式启动集群&k8s常见报错集合(on the fly)
debug模式启动-支持sa 集群内(pod访问api)使用443加密 no1 no2 安装flanneld kubelet/kube-proxy m1 安装etcd/ api/contruller/ ...
- MPU6050带字符驱动的i2c从设备驱动1
开干: 1.闲言碎语 这个驱动,越写觉的越简单,入门难,入门之后感觉还好.Linux开发还是比较友好的. 2.编写MPU6050带字符驱动的i2c从设备驱动 要实现的功能就是,将MPU6050作为字符 ...
- JSP通过AJAX获取服务端的时间,在页面上自动更新
1.在页面上引入js <head> <meta http-equiv="Content-Type" content="text/html; charse ...
- 媳妇要转java开发,我该怎么办?
我是一名5年的java开发者,媳妇是一个5年的软件实施工程师,我们结婚快一年了,这几天她突然对我说,她想转java开发,让我辅导她学习java,我该怎么弄,我心底是不愿意她转开发的,毕竟她年龄也不小了 ...
- 解决importerror no module named mysqldb
在window中 1:在Scripts文件夹下会出现一系列和pip有关的文件,DOS中到Scripts,运行:pip install mysql-python 2:报错:Microsoft Visua ...