【只争朝夕】

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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];

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

  

posted on 2019-04-04 10:50  【只争朝夕】  阅读(190)  评论(0编辑  收藏  举报