A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangcheng5468 中级黑马   /  2013-8-1 10:07  /  2761 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhangcheng5468 于 2013-8-1 10:43 编辑

通过内存流NPOI操作Excel时报错,提示DisposeException,但建立HSSFWorkbook仍在using内部内存流的作用域当中!求解?
  1. WebClient wc = new WebClient();
  2.             wc.Credentials = new NetworkCredential(txt_username.Text.Trim(), txt_pwd.Text.Trim());//指定用户名密码
  3.             //约定下载的文件名为“门店号+当天日期”如:0220130801.xls
  4.             using(Stream stream = wc.OpenRead("ftp://127.0.0.1/0220130730.xls"))
  5.             {
  6.                 using(Stream ms = new MemoryStream())
  7.                 {
  8.                     byte[] bytes = new byte[1024];//创建1K的缓存区
  9.                     int readbytes;
  10.                     while ((readbytes = stream.Read(bytes, 0, bytes.Length)) > 0)
  11.                     {
  12.                         ms.Write(bytes, 0, bytes.Length);
  13.                     }
  14.                     //TODO:根据内存流创建HSSFWorkbook失败
  15.                     HSSFWorkbook wb = new HSSFWorkbook(ms);
  16.                     MessageBox.Show(wb.GetSheetAt(0).GetRow(0).GetCell(0).StringCellValue);
  17.                 }
  18.             }            
  19.             MessageBox.Show("数据导入成功!");
复制代码

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

5 个回复

倒序浏览
亲 ,可以贴下代码么 ,具体可以参考下 http://tonyqus.sinaapp.com/   NPOI 文档,很全的。例子什么都有,操作2007 的也有。
回复 使用道具 举报
本帖最后由 咖喱猫 于 2013-8-1 11:36 编辑

不知道什么情况
回复 使用道具 举报

你这应该是路径问题吧!
回复 使用道具 举报
楼主有没有  
using NPOI.HSSF.UserModel;

按照你的代码我运行的是ok的

回复 使用道具 举报


这个错吧! 这个是因为StringCellValue这个方法!

先了解下StringCellValue这个方法:
  1. switch (cell.CellType)
  2. {
  3. case HSSFCell.CELL_TYPE_BOOLEAN:
  4. ret = cell.BooleanCellValue.ToString();
  5. break;
  6. case HSSFCell.CELL_TYPE_NUMERIC:
  7. ret = cell.NumericCellValue.ToString();
  8. break;
  9. case HSSFCell.CELL_TYPE_STRING:
  10. ret = cell.StringCellValue;
  11. break;
  12. }
复制代码
说明:1.从单元格里读取数据后,需要先判断单元格的类型,如果是CELL_TYPE_BOOLEAN或者CELL_TYPE_NUMERIC则要用ToString不能用StringCellValue
       2.如果单元格的内容为null的时候,仍然StringCellValue,则就会报上面的错误.


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马