转自:http://www.cnblogs.com/kaiwanlin/p/5782834.html
1.今天再处理Excel2007、2010文件,格式.xlsx文件存在一个问题,在调用 Write方法之后关闭了传入的文件流。

2.今天针对此问题好一顿的测试:

2.1 在有文件构建时不是.xlsx文件格式会报错,构建不成。.xls文件是不行的。

2.2 XSSFWorkbook对象调用 write方法传去MemoryStream对象后,会自动关闭传入的参数。导致往Response.OutputStream会有问题?

  HSSFWorkbook对象则不会,针对这个问题还专门查了HSSFWorkbook源代码下面有,本来想查XSSFWorkbook的源代码,现在还没公开呢。

3.再有导出.xlsx文件时,在打开时总报:

 错误提示: Excel在“春天Excel2007.xlsx”中发现不可读取内容。是否恢复工作簿的内容?如果信任此工作簿的来源,请单击“是”。 单击“是”后:Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。

那么这些问题如何处理呢?直接上代码如下:
HSSFWorkbook类对象Write方法:

/// <summary>/// Write out this workbook to an Outputstream.  Constructs/// a new POI POIFSFileSystem, passes in the workbook binary representation  and/// Writes it out./// </summary>/// <param name="stream">the java OutputStream you wish to Write the XLS to</param>public override void Write(Stream stream){byte[] bytes = GetBytes();POIFSFileSystem fs = new POIFSFileSystem();// For tracking what we've written out, used if we're//  going to be preserving nodesList<string> excepts = new List<string>(1);MemoryStream newMemoryStream = new MemoryStream(bytes);// Write out the Workbook streamfs.CreateDocument(newMemoryStream, "Workbook");// Write out our HPFS properties, if we have themWriteProperties(fs, excepts);if (preserveNodes){// Don't Write out the old Workbook, we'll be doing our new oneexcepts.Add("Workbook");// If the file had WORKBOOK instead of Workbook, we'll Write it//  out correctly shortly, so don't include the old oneexcepts.Add("WORKBOOK");// Copy over all the other nodes to our new poifsCopyNodes(this.filesystem, fs, excepts);}fs.WriteFileSystem(stream);fs.Dispose();newMemoryStream.Dispose();bytes = null;}

问题2对应代码:

FileStream fileStream = new FileStream(HttpContext.Current.Server.MapPath("~/Resources/Template/" + strHeaderText  + ".xlsx"), FileMode.Create, FileAccess.Write);workbook.Write(fileStream);//调用这个后会关于文件流,在HSSFWorkbook不会关闭所以在处理时应注意FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("~/Resources/Template/" + strHeaderText + ".xlsx"), FileMode.Open, FileAccess.Read);long fileSize = fs.Length;
byte[] fileBuffer = new byte[fileSize];fs.Read(fileBuffer, 0, (int)fileSize);HttpContext.Current.Response.BinaryWrite(fileBuffer);fs.Close();

问题3对应代码:

FileStream fileStream = new FileStream(HttpContext.Current.Server.MapPath("~/Resources/Template/" + strHeaderText  + ".xlsx"), FileMode.Create, FileAccess.Write);workbook.Write(fileStream);//调用这个后会关于文件流,在HSSFWorkbook不会关闭所以在处理时应注意               FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("~/Resources/Template/" + strHeaderText + ".xlsx"), FileMode.Open, FileAccess.Read);long fileSize = fs.Length;//加上设置大小下载下来的.xlsx文件打开时才没有错误HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());byte[] fileBuffer = new byte[fileSize];fs.Read(fileBuffer, 0, (int)fileSize);HttpContext.Current.Response.BinaryWrite(fileBuffer);fs.Close();

NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题相关推荐

  1. java导出excel 序号_java web将数据导出为Excel格式文件代码片段

    本文实例为大家分享了java web将数据导出为Excel格式文件的具体代码,供大家参考,具体内容如下 1.jsp代码 2.js代码 function getVerExcel() { window.l ...

  2. 用Allegro导出DXF/DWG格式文件

    用Allegro导出DXF/DWG格式文件 DWG是一种通用格式文件,是AUTOCAD创立的图纸保存格式.DXF(Drawing Exchange File)是一种图形交换文件,用于在AUTOCAD及 ...

  3. NX软件:机器人焊点坐标数据导出为CSV格式文件操作方法

    目录 概述 创建点模型 生成焊点模型 导出焊点数据为CSV文件 焊点数据CSV文件查看 本文已经首发在个人微信公众号:工业机器人仿真与编程(微信号:IndRobSim),欢迎关注! 概述 在使用机器人 ...

  4. NPOI导出Excel百分比格式

    NPOI导出Excel百分比格式 using using System; using System.Collections.Generic; using System.Data; using Syst ...

  5. poi 导出(.xlsx)文件

    poi 导出(.xlsx)文件,在XSSFWorkbook wb = new XSSFWorkbook(); 时报错 java.lang.ClassCastException: java.lang.N ...

  6. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...

    本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...

  7. nodejs json转对象_nodejs读取xlsx格式文件

    # nodejs读取xlsx格式文件 安装 npm i node-xlsx -D // 或者 yarn add node-xlsx -D 使用 读取表格数据,并生成json对象 /*** @auth ...

  8. python操作xlsx格式文件

    python操作xlsx格式文件 一.准备工作 二 .xlrd库读取 三.pandas库读取 1.安装pandas: pip install pandas 2.代码如下 3.操作行列 一.准备工作 二 ...

  9. nodejs读取xlsx格式文件

    nodejs读取xlsx格式文件 安装 npm i node-xlsx -D // 或者 yarn add node-xlsx -D 使用 读取表格数据,并生成json对象 /*** @author ...

  10. 如何用matlab实现矩阵与mat格式、xlsx格式文件互转

    目录 一.前言 二..mat格式 三..xlsx格式 四.出现load('file.mat') 数据变成struct结构体的问题 一.前言 当我们利用matlab去处理我们的实验数据时,常常需要读取m ...

最新文章

  1. 最新8篇ICML2020投稿论文:自监督学习、联邦学习、图学习、数据隐私、语言模型、终身学习…...
  2. ORA-02291: 违反完整约束条件 - 未找到父项关键字 解决方法
  3. 【数据竞赛】“达观杯”文本智能处理挑战赛1
  4. python代码查询_python 查询代码量
  5. boost::mp11::mp_pop_front相关用法的测试程序
  6. java数组中重复_数组中重复的数字 java
  7. STM32工作笔记0062---定时器中断实验
  8. devc跟vc2010通用吗_王者荣耀:通用铭文大全!让你赢在起跑线上!教你1比1换铭文...
  9. 不会JS中的OOP,你也太菜了吧!(第二篇)
  10. Jenkins checkout的文件 , TortoiseSVN 无法提交。 问题已经解决啦!
  11. AXURE RP EXTENSION FOR CHROME:AXURE RP铬延展剂--谷歌工具插件使用配置(打开并成功预览本地.html文件)
  12. mdpi Algorithms 期刊word 模板下载
  13. ps色轮插件Coolorus v2.5.14(专业的Photoshop配色插件,支持PS CC 2019)
  14. 关于硬盘数据恢复的一些思考
  15. 鸿蒙与混沌的区别,混沌的近义词(混沌鸿蒙同义词)
  16. Word 2003 出现 向程序发送命令时出现问题 的 解决方案
  17. 数字翻译成英语JavaScript
  18. 品牌的成功取决于质量的好坏
  19. 如何使用WinRAR将一个大文件压缩成多个小的压缩包
  20. 如何在表格里做计算机统计表,excel怎么制作统计表格 excel统计表怎么添加标题...

热门文章

  1. 基于java的enigma的加密程序
  2. php微信客服,微信客服管理 - 微信公众平台开发者文档 - php中文网手册
  3. 计算机二级背景图设置,计算机二级。 ppt2010。 背景图片,柔化边缘椭圆 图片样式效果 怎么弄??...
  4. 前端学习笔记之三PS
  5. 从幼苗长成大树 中美两国GIS软件技术已并驾齐驱
  6. 全国计算机等级考试三级Linux应用与开发技术考试-习题汇总
  7. Verilog学习日志(2021.7.31)
  8. 裁判文书网2019年9月份最新爬虫
  9. 后端开发岗位要求汇总
  10. Oracle 创建用户授权视图,别名通过同义词解决