黑马程序员技术交流社区

标题: 通过内存流NPOI操作Excel时报错 [打印本页]

作者: zhangcheng5468    时间: 2013-8-1 10:07
标题: 通过内存流NPOI操作Excel时报错
本帖最后由 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("数据导入成功!");
复制代码

作者: 马晓凤    时间: 2013-8-1 10:24
亲 ,可以贴下代码么 ,具体可以参考下 http://tonyqus.sinaapp.com/   NPOI 文档,很全的。例子什么都有,操作2007 的也有。
作者: 咖喱猫    时间: 2013-8-1 10:39
本帖最后由 咖喱猫 于 2013-8-1 11:36 编辑

不知道什么情况

作者: zhangcheng5468    时间: 2013-8-2 08:41
咖喱猫 发表于 2013-8-1 10:39
不知道什么情况

你这应该是路径问题吧!
作者: 彭家贰小姐    时间: 2013-8-2 11:20
楼主有没有  
using NPOI.HSSF.UserModel;

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


作者: 彭家贰小姐    时间: 2013-8-2 11:28
咖喱猫 发表于 2013-8-1 10:39
不知道什么情况


这个错吧! 这个是因为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,则就会报上面的错误.







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2