zoukankan      html  css  js  c++  java
  • NPOI操作EXCEL

    1. 下载DLL  官方下载地址: http://npoi.codeplex.com/releases

    2. 5个DLL全部添加到程序的引用中

    3. NPOI里面的管理层次为:workbook->worksheet->row->cell. 这些对象全部都是内存对象。

    4. 具体操作,网上有许多,需要注意的是

    --读取时,workbook是从FileStream中生成的,

      FileStream fs = new FileStream(tbNewVer.Text, FileMode.Open, FileAccess.Read)

      XSSFWorkbook wbnew = new XSSFWorkbook(fs);

      奇怪的是,fs被用过之后就不能再用了,好像workbook在用它初始化之后就把它释放了。

    --保存时,也需要借助一个FileStream对象将workbook中的内容写入具体的文件。而workbook并没有Save之类的功能,没找到

      MemoryStream stream = new MemoryStream();

      wbres.Write(stream);

      var buf = stream.ToArray();

      FileStream resfile = new FileStream(NEW_FILE_NAME, FileMode.Create, FileAccess.Write);

      resfile.Write(buf, 0, buf.Length);

      resfile.Flush();

    但我看有的教程中写得比较简洁,无需借助MemoryStream:

      file = new FileStream(filepath, FileMode.Open, FileAccess.Write);

      wb.Write(file);

      file.Close();

      wb.Close()

    我用这个写法做,生成的文件总是打不开,显示是文件损坏。

    后来发现:凡是直接NOIP生成的文件,可以用两种方法操作,都没有问题

    但是用我电脑上的EXCEL程序编辑过的文件,不管用哪种方法修改,EXCEL程序打开文件时就会出错。

    不知道怎么回事。

    --sheet.CreateRow之后并不会创建Row中的Cell,Cell还是需要一个个创建才能用

    -- irow.GetCell与irow.Cells基本一样,但是当col超出引用范围时,Cells索引器会异常,而GetCell返回null

      IRow irow=sheet.GetRow(osm.xlRow);

      ICell srccell=irow.GetCell(col);

      ICell srccell=irow.Cells[col];

    -- 因为全部是在内存中操作,速度还是很快的。

      

  • 相关阅读:
    mysql分组查询
    (三)分布式数据库tidb-隔离级别详解
    (二)分布式数据库tidb-事务
    (一)ArrayList集合源码解析
    (一)分布式数据库tidb-简介
    (二)LinkedList集合解析及手写集合
    电商数仓中需要统计的指标
    实时推荐模型的算法设计
    数据库需要掌握到什么程度可以应付工作?
    Mysql的万能优化方法
  • 原文地址:https://www.cnblogs.com/sinceret/p/10653625.html
Copyright © 2011-2022 走看看