当导出2007格式的时候,打开文件总是报错“发现 xxx中的部分内容有问题。是否让我们尽量尝试恢复?”。

导出的程序:

protected void btnValidateInternalData_Click(object sender, EventArgs e)
{
if (!FileUploadEmployee.HasFile)
{
ShowMessage("请先选择文件。");
return;
} var employeeData = GetDataTable();
if (employeeData.Rows.Count == )
{
ShowMessage("文件数据为空。");
return;
} ValidateEmployeeField(employeeData); var fileName = FileUploadEmployee.FileName;
DataSet dataSet = new DataSet();
dataSet.Tables.Add(employeeData);
byte[] fileBinary = null;
fileBinary = ExcelHelper.ExportToExcel(dataSet, DataFormat.Excel2007);
var reportFileName = Path.GetFileNameWithoutExtension(fileName) + "Validated" + DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(fileName);
Response.Buffer = true;
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", @"attachment;filename=""" + reportFileName + @"""");
Response.AddHeader("Content-Length", fileBinary.Length.ToString());
Response.ContentType = "application/vnd.ms-excel"; //"application/octet-stream";
Response.BinaryWrite(fileBinary);
//说明:当仅使用Response.End()发送缓冲输出时,打开导出的excel会出现 部分内容有问题 的错误。
Response.Flush();//向客户端发送当前所有缓冲的输出。
Response.End();//将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 EndRequest 事件。
}

从dataset创建excel表格的方法:

 public static byte[] ExportToExcel(DataSet origDataSet, DataFormat dataFormat, string culture = "", bool shouldCheckHideColumnsForReport = false)
{
IWorkbook workbook = null;
switch (dataFormat)
{
case DataFormat.Excel97_2003:
workbook = new HSSFWorkbook();
break;
case DataFormat.Excel2007:
workbook = new XSSFWorkbook();
break;
} ICellStyle cellstyleDate = workbook.CreateCellStyle();
short df = workbook.CreateDataFormat().GetFormat(DateUtils.FORMAT_DATETIME);
if (culture == new Language(LanguageEnum.zhcn).Code)
df = workbook.CreateDataFormat().GetFormat(DateUtils.FORMAT_DATETIME);
cellstyleDate.DataFormat = df; foreach (DataTable dt in origDataSet.Tables)
{
ISheet sheet = workbook.CreateSheet(dt.TableName); int columnIndex = ;
IRow row = sheet.CreateRow();
ICell cell;
foreach (DataColumn dc in dt.Columns)
{
string columnName = dc.ColumnName;
if (shouldCheckHideColumnsForReport && ShouldSkipColumnForReport(columnName))
{
//dont add this column in this external report
continue;
}
cell = row.CreateCell(columnIndex);
cell.SetCellValue(dc.ColumnName); columnIndex++;
} List<int> lockedColumnList = new List<int>();
int rowIndex = ;
foreach (DataRow dr in dt.Rows)
{
row = sheet.CreateRow(rowIndex);
columnIndex = ;
foreach (DataColumn dc in dt.Columns)
{
string columnName = dc.ColumnName;
if (shouldCheckHideColumnsForReport && ShouldSkipColumnForReport(columnName))
{
//dont add this column in this external report
continue;
}
cell = row.CreateCell(columnIndex); if (dc.DataType == Type.GetType("System.DateTime"))
{
DateTime dateTime = DateTime.MinValue;
if (DateTime.TryParse(dr[columnName].ToString(), out dateTime))
{
cell.CellStyle = cellstyleDate;
cell.SetCellValue(dateTime);
}
else
cell.SetCellValue(dr[columnName].ToString());
}
else if (dc.DataType == Type.GetType("System.Decimal"))
{
double decimalValue = ;
if (double.TryParse(dr[columnName].ToString(), out decimalValue))
{
cell.SetCellValue(decimalValue);
}
else
cell.SetCellValue(dr[columnName].ToString());
}
else
{
string columnValue = dr[columnName].ToString();
cell.SetCellValue(columnValue);
}
columnIndex++;
}
rowIndex++;
}
}

Response.Flush() Response.End()的区别

//Response.Flush() 将缓存中的内容立即显示出来
//Response.End()  缓冲的输出发送到客户端  停止页面执行
//例:
//Response.Write("520");
//Response.End(); \\执行到这里结束页面显示"520" 下面的语句不再执行 (和没写一样)
//Response.Write("025");

//如果是Response.Flush() 将缓存中的内容立即显示出来,然后再执行后面的语句

NPOI 导出Excel表报错的更多相关文章

  1. NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters

    /******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...

  2. NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头

    虽然发表了2篇关于NPOI导出EXCEL的文章,但是最近再次使用的时候,把以前的代码粘贴过来,居然报了一个错误: “服务器无法在发送 HTTP 标头之后追加标头” 后来也查询了很多其他同学的文章,都没 ...

  3. NPOI导出Excel及使用问题

    NPOI导出Excel及使用问题 因为最近公司质管部门提出了一个统计报表的需求:要求导出一个2016及2017年度深圳区域的所有供应商的费用成本计算--一个22列的Excel表,其中还包括多列的合并单 ...

  4. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  5. NPOI导出EXCEL 打印设置分页及打印标题

    在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置  sheet1.FitToPage = false; 而 ...

  6. .NET NPOI导出Excel详解

    NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...

  7. NPOI导出Excel(含有超过65335的处理情况)

    NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...

  8. [转]NPOI导出EXCEL 打印设置分页及打印标题

    本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...

  9. java导出excel报错:getOutputStream() has already been called for this response

    对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...

随机推荐

  1. vue自学入门-5(vuex state)

    vue自学入门-1(Windows下搭建vue环境) vue自学入门-2(vue创建项目) vue自学入门-3(vue第一个例子) vue自学入门-4(vue slot) vue自学入门-5(vuex ...

  2. java学习笔记之反射—Class类实例化和对象的反射实例化

    反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类的实例化对象,可以采用三种方式完成. java.lang.Class类的定义: public f ...

  3. 松软科技课堂:jQuery 效果 - 淡入淡出

    jQuery Fading 方法 通过 jQuery,您可以实现元素的淡入淡出效果. jQuery 拥有下面四种 fade 方法: fadeIn() fadeOut() fadeToggle() fa ...

  4. webpack打包后不能调用,改用uglifyjs打包压缩

    背景: 项目基于原生js,没用到任何脚手架和框架,但也需要打包压缩. 项目的js中声明了一些全局变量 供其他js调用. 这时候如果用webpack打包,基于webpack特性,会嵌套一层大函数,会将j ...

  5. contos7 用户管理相关操作命令

    # 查看用户列表 cut -d : -f 1 /etc/passwd # 查看可以登录系统的用户 cat /etc/passwd | grep -v /sbin/nologin | cut -d : ...

  6. 一些java基础知识的备忘

    接口和抽象类的区别是什么? 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法. 接口中除了static.final变量 ...

  7. 洛谷P1308 统计单词数

    原题链接:https://www.luogu.org/problem/P1308 #include<iostream> #include<cstring> #include&l ...

  8. 最近公共祖先 Lowest Common Ancestors

    基于深度的LCA算法:  对于两个结点u.v,它们的深度分别为depth(u).depth(v),对于其公共祖先w,深度为depth(w),u需要向上回溯depth(u)-depth(w)步,v需要d ...

  9. js封装删除数组指定的某个元素的方法

    首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) { for (var i = ...

  10. mysql对表中数据根据某一字段去重

    要删除重复的记录,就要先查出重复的记录,这个很容易做到 注意:这是查出所有重复记录的第一条记录,需要保留,因此需要添加查询条件,查出所有的重复记录 ) ) 然后 delete from cqssc w ...