先说说问题的来源 ,使用NPOI读取Except,先通过流来读取,如果符合要求,就将流保存为文件。

众所周知,流只能读一次,所以在流读取之前需要将流拷贝一份,保存文件的时候使用。

        protected void Button7_Click(object sender, EventArgs e)
{
//FileUpload1是 一个FileUpload控件
FileInfo fileInfo = new FileInfo(FileUpload1.FileName); IWorkbook workbook = null; MemoryStream m = new MemoryStream();
//将文件的流拷贝一份,以内存流的格式保存
CopyStream(FileUpload1.PostedFile.InputStream, m); workbook = WorkbookFactory.Create(FileUpload1.PostedFile.InputStream);
}

贴出流拷贝的代码

    private void CopyStream(Stream input, Stream output)
{
try
{
int bufferSize = ;
byte[] buffer = new byte[bufferSize]; while (true)
{
int read = input.Read(buffer, , buffer.Length);
if (read <= )
{
return;
}
output.Write(buffer, , read);
}
}
catch (Exception)
{
throw;
}
}

当读取Excel文件是 .xlsx的时候一点问题没有,是.xls的时候就抛出了  Your stream was neither an OLE2 stream, nor an OOXML stream. 的异常

但是去掉流拷贝就不会出这种问题

     protected void Button7_Click(object sender, EventArgs e)
{
//FileUpload1是 一个FileUpload控件
FileInfo fileInfo = new FileInfo(FileUpload1.FileName); IWorkbook workbook = null; workbook = WorkbookFactory.Create(FileUpload1.PostedFile.InputStream);
}

然后就各种查各种试   分析可能是office2003与office2007以及以后的版本的读取方式不同  OLE2 stream  与 OOXML stream的方式读取

按道理来说  WorkbookFactory.Create(FileUpload1.PostedFile.InputStream); 应该是支持任意版本的Excel的读取的,怎么拷贝了一下流就不行了呢?

真的是好奇怪呢,难道流拷贝改变了流????

困扰了我好几天,当这篇文章看到第三次的时候 POI - 读取Excel2003、Excel2007或更高级的兼容性问题

决定试一试流拷贝结束之后,根据后缀名不同,采取不同的方式进行读取

        protected void Button7_Click(object sender, EventArgs e)
{
//FileUpload1是 一个FileUpload控件
FileInfo fileInfo = new FileInfo(FileUpload1.FileName); IWorkbook workbook = null; MemoryStream m = new MemoryStream();
//将文件的流拷贝一份,以内存流的格式保存
CopyStream(FileUpload1.PostedFile.InputStream, m); if (fileInfo.Extension.ToLower().Equals(".xls"))
{
workbook = new HSSFWorkbook(FileUpload1.PostedFile.InputStream);
}
else
{
workbook = WorkbookFactory.Create(FileUpload1.PostedFile.InputStream);
}
}

然后问题就解决了。哈哈,真的好开心

----------------------------------------------------------------------------

ps:这种问题,对呀大神来说,兴许很容易找到思路,找到正确的解决办法。

但是对于新手来说,着实不易。解决问题的过程还是蛮有意思的,还有问题解决之后的成就感。

这也是一种成长,不是么?

Your stream was neither an OLE2 stream, nor an OOXML stream.问题的解决的更多相关文章

  1. C#图像处理:Stream 与 byte[] 相互转换,byte[]与string,Stream 与 File 相互转换等

    C# Stream 和 byte[] 之间的转换 一. 二进制转换成图片 MemoryStream ms = new MemoryStream(bytes); ms.Position = 0; Ima ...

  2. android studio 解析Excel数据格式导入poi-3.17.jar时的一系列报错及处理Failed resolution of: Ljavax/xml/stream/XMLEventFactory,duplicate entry: org/apache/xmlbeans/xml/stream/Location.class,GC overhead limit exceeded

    在org官网下载的poi jar包,导入到studio compile files('libs/poi-3.17.jar') compile files('libs/poi-ooxml-3.17.ja ...

  3. Java 8函数编程轻松入门(二)Stream的使用

    在C#中,微软基于IEnumerable接口,提供许多便捷的扩展方法,便于实际的开发.在Java 1.8中,Collection接口新增了default stream方法.我们可以针对java集合,在 ...

  4. 《Kafka Stream》调研:一种轻量级流计算模式

    原文链接:https://yq.aliyun.com/articles/58382 摘要: 流计算,已经有Storm.Spark,Samza,包括最近新起的Flink,Kafka为什么再自己做一套流计 ...

  5. C++ I/O stream

    C++ I/O stream Ø The first, you should understand following: ... Ø Text: Ø Version: Visual studio 20 ...

  6. webservice wsdl axis2报错 Provider com.bea.xml.stream.MXParserFactory not found

    错误信息: Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com. ...

  7. C#学习之Stream

    上节课老师主要讲了stream及其一些运用和实例,下面我们就来讨论讨论Stream. 我们知道,C#中常用的stream有文件流(FileSteam),内存流(MemoryStream),压缩流(GZ ...

  8. Stream Player control

    In this article you will find an implementation of a stream player control. Download WPF demo - 11 M ...

  9. Stream/Bytes[]/Image对象相互转化

    Stream/Bytes[]/Image对象相互转化 Stream转Byte数组.Image转Byte数组.文件转Stream等 /// <summary> /// 将 Stream 转成 ...

随机推荐

  1. Whole life

    Whole life the wonder such you bring the beautyI can see but i keep deep inside on itOh life i feel ...

  2. 杭电ACM1001

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=1001 #include <stdio.h> int main(void) { int i,n, ...

  3. Ubuntu下用wireshark抓取802.11封包并进行过滤分析

    要用wireshark抓802.11的包 需要在linux下进行. 要在linux下抓802.11的包 需要在linux下安装无线网卡驱动. 所以 在正式抓取之前先把这两样东西搞起来. *没有特殊说明 ...

  4. dedecms qq咨询平均分配

    qq后台页: qq_admin.php <style type="text/css"> <!-- * {margin:0; padding:0;} .wrap { ...

  5. odi 12.2.1中访问excel文件

    由于在odi 12.2.1中,必须使用jdk1.8,而jdk1.8中jdbc-odbc bridge已经不再支持,因此,可以使用Progress DataDirect SequeLink来充当jdbc ...

  6. 调试 zeromq 发现 accept 死循环

    起因:在群里一个同学说使用 zeromq 的时候出了点儿问题,问题描述如下“router连接十几万客户端后,然后把router杀死,重启,这时候zeromq的某个线程99%的cpu,卡死了,再也接受不 ...

  7. 802.11MAC基础

    做无线网络测试已经大半年了,在这过程中发现<802.11权威指南>真是以本好书,在这里分享一下学习到的知识,也帮助我记忆. 1.MAC: mac(媒介访问控制层),它位于物理层之上,控制着 ...

  8. jsp取得绝对路径的方法(避免请求转发的方式导致路径错误)

    <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+re ...

  9. android中所有颜色大全

    < ?xml version="1.0" encoding="utf-8" ?>       < resources>< colo ...

  10. u-boot学习笔记(一):基础概念

    1.U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目.U-Boot的作用是系统引导.U-Boot从FADSROM.8xxROM.PPCBOOT逐步发展演化 ...