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];
-- 因为全部是在内存中操作,速度还是很快的。