NPOI —— 开发问题

看不透你蒙着的面纱

一:发现不可读取内容是否恢复此工作簿内容?如果信任此工作簿的内容?请单击是:

1.很纳闷这个错误,因为得到的内容一看,没啥特别的,在不修改原来EXECL文件在这样操作,还是这种错误,网上说的是利用这段代码,即可解决,如下代码:

//此处会触发问题二,故需要改动,这就为何需要ms.Length
response.AddHeader("Content-Length", ms.Length.ToString());
//改动版本如下
response.AddHeader("Content-Length", ms.GetBuffer().Length.ToString());

2.如此依然没法解决,直到MemoryStream的另一个导出byte数组方法进入眼帘,问题得到解决,即使没有标明 Content-Length 也可,感觉网上这种答案过于儿戏,代码如下:

var bytes = ms.ToArray();

二:无法访问已关闭的流:

1.其实解决问题一,问题二根本不复存在,但是还是要提到一点NPOI所做的事,或许真有遇到这样使用的
2.本着写进内存流,然后和平常那样操作内存流,怎知NPOI好心多做一步,如下代码:

string path = "";
 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
 XSSFWorkbook workbook = new XSSFWorkbook(fs);
 using (var ms = new MemoryStream())
{
 workbook.Write(ms);
//此处报错
 var size = ms.Length;
}

3.从断点看ms,除了已经装有字节外,workbook.Write前ms.CanRead这些均为true,Write后,可明显看到这些均为false,且ms.Length已报错,继续执行这个语句必然不可以,故此,NPOI已经‘好心’帮咱们关了这个流,为了获取这个Length,其实ms本就可以导出byte数组,当然你还可以new一个MemoryStream去装ms流,但是我倒是觉得能获取到byte数组,这些均可以做,脑筋太固化可不太好,虽然我经常如此。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值