NPOI 2.0 教程(二):编辑既存的EXCEL文件
分类: C#技术 2014-03-11 15:40 993人阅读 评论(3) 收藏 举报
转载请注明出处 http://blog.csdn.net/fujie724
上一篇中讲了用NPOI创建新EXCEL文件的基本方法,但有时候我们需要的是对一个已有的EXCEL文件进行编辑修改。那么用NPOI该怎么做呢?
请接着学习
在这一篇里,我们读入上一篇教程中生成的EXCEL,然后以其做为模版,修改之后保存为另一份EXCEL
第一步
[csharp] view plaincopyprint?
- //上一篇教程中生成的文件
- string tempPath = "d:\\excel.xls";
- HSSFWorkbook wk = null;
- using (FileStream fs = File.Open(tempPath, FileMode.Open,
- FileAccess.Read, FileShare.ReadWrite))
- {
- //把xls文件读入workbook变量里,之后就可以关闭了
- wk = new HSSFWorkbook(fs);
- fs.Close();
- }
//上一篇教程中生成的文件 string tempPath = "d:\\excel.xls"; HSSFWorkbook wk = null; using (FileStream fs = File.Open(tempPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { //把xls文件读入workbook变量里,之后就可以关闭了 wk = new HSSFWorkbook(fs); fs.Close(); }
第二步
在读入之后,操作HSSFWorkbook这个类就和第一篇教程里一样了。
必须要遵循的一个规则是,如果你要编辑的行和单元格,原本没有值,或者从未创建过的,就必须先创建。
如:
我要使用第二行第一列的单元格,在上一篇教程中并未对这个位置进行创建,那么必须先创建。
[csharp] view plaincopyprint?
- //在第二行创建行
- IRow row = sheet.CreateRow(1);
- //在第二行的第一列创建单元格
- ICell cell = row.CreateCell(0);
//在第二行创建行 IRow row = sheet.CreateRow(1); //在第二行的第一列创建单元格 ICell cell = row.CreateCell(0);
之后这个cell才能被使用。
- 那么如果我不创建,直接使用会怎么样呢?
- 答:sheet.GetRow(1)取回来的值为null,在null上再使用GetCell(0)就会报空对象的错误。
在上一篇教程中,我们已经对该文件的第一行第一列的这个位置创建过单元格,并且赋值,所以可以直接使用,采用下面的方式。
[csharp] view plaincopyprint?
- //获取第一行
- IRow row = sheet.GetRow(0);
- //在第一行获取第一列单元格
- ICell cell = row.GetCell(0);
//获取第一行 IRow row = sheet.GetRow(0); //在第一行获取第一列单元格 ICell cell = row.GetCell(0);
上面两种写法也可以简写成如下的方式
[csharp] view plaincopyprint?
- //创建第二行,第一列
- ICell cell = sheet.CreateRow(1).CreateCell(0);
- //获取第一行,第一列
- ICell cell = sheet.GetRow(0).GetCell(0);
//创建第二行,第一列 ICell cell = sheet.CreateRow(1).CreateCell(0); //获取第一行,第一列 ICell cell = sheet.GetRow(0).GetCell(0);
然后使用cell.SetCellValue()函数对其赋值即完成编辑。
当然,赋值语句也可以和上述语句并作一行书写。例如
[csharp] view plaincopyprint?
- sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");
sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");
第三步
编辑完之后需要保存
[csharp] view plaincopyprint?
- using (FileStream fileStream = File.Open("d:\\excel.xls",
- FileMode.OpenOrCreate, FileAccess.ReadWrite))
- {
- wk.Write(fileStream);
- fileStream.Close();
- }
using (FileStream fileStream = File.Open("d:\\excel.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { wk.Write(fileStream); fileStream.Close(); }
这样就完成了读入已有文件,编辑,保存。
时间: 2024-11-29 05:13:01