分类: C#技术 2014-03-11 15:40 993人阅读 评论(3) 收藏 举报

转载请注明出处 http://blog.csdn.net/fujie724

上一篇中讲了用NPOI创建新EXCEL文件的基本方法,但有时候我们需要的是对一个已有的EXCEL文件进行编辑修改。那么用NPOI该怎么做呢?

请接着学习

在这一篇里,我们读入上一篇教程中生成的EXCEL,然后以其做为模版,修改之后保存为另一份EXCEL

第一步

  1. //上一篇教程中生成的文件
  2. string tempPath = "d:\\excel.xls";
  3. HSSFWorkbook wk = null;
  4. using (FileStream fs = File.Open(tempPath, FileMode.Open,
  5. FileAccess.Read, FileShare.ReadWrite))
  6. {
  7. //把xls文件读入workbook变量里,之后就可以关闭了
  8. wk = new HSSFWorkbook(fs);
  9. fs.Close();
  10. }
//上一篇教程中生成的文件
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这个类就和第一篇教程里一样了。

必须要遵循的一个规则是,如果你要编辑的行和单元格,原本没有值,或者从未创建过的,就必须先创建。

如:

我要使用第二行第一列的单元格,在上一篇教程中并未对这个位置进行创建,那么必须先创建。

  1. //在第二行创建行
  2. IRow row = sheet.CreateRow(1);
  3. //在第二行的第一列创建单元格
  4. ICell cell = row.CreateCell(0);
//在第二行创建行
IRow row = sheet.CreateRow(1);
//在第二行的第一列创建单元格
ICell cell = row.CreateCell(0);

之后这个cell才能被使用。

  • 那么如果我不创建,直接使用会怎么样呢?
  • 答:sheet.GetRow(1)取回来的值为null,在null上再使用GetCell(0)就会报空对象的错误。

在上一篇教程中,我们已经对该文件的第一行第一列的这个位置创建过单元格,并且赋值,所以可以直接使用,采用下面的方式。

  1. //获取第一行
  2. IRow row = sheet.GetRow(0);
  3. //在第一行获取第一列单元格
  4. ICell cell = row.GetCell(0);
//获取第一行
IRow row = sheet.GetRow(0);
//在第一行获取第一列单元格
ICell cell = row.GetCell(0);

上面两种写法也可以简写成如下的方式

  1. //创建第二行,第一列
  2. ICell cell = sheet.CreateRow(1).CreateCell(0);
  3. //获取第一行,第一列
  4. ICell cell = sheet.GetRow(0).GetCell(0);
//创建第二行,第一列
ICell cell = sheet.CreateRow(1).CreateCell(0); //获取第一行,第一列
ICell cell = sheet.GetRow(0).GetCell(0);

然后使用cell.SetCellValue()函数对其赋值即完成编辑。

当然,赋值语句也可以和上述语句并作一行书写。例如

  1. sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");
sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");

第三步

编辑完之后需要保存

  1. using (FileStream fileStream = File.Open("d:\\excel.xls",
  2. FileMode.OpenOrCreate, FileAccess.ReadWrite))
  3. {
  4. wk.Write(fileStream);
  5. fileStream.Close();
  6. }
using (FileStream fileStream = File.Open("d:\\excel.xls",
FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
wk.Write(fileStream);
fileStream.Close();
}

这样就完成了读入已有文件,编辑,保存。

NPOI 2.0 教程(二):编辑既存的EXCEL文件的更多相关文章

  1. 【Java/JDBC】借助ResultSetMetaData,从数据库表中抽取字段信息存成Excel文件

    本例工程下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-3.rar 工作中曾有个为42张表建立测 ...

  2. HTML 表单 存为EXCEL文件时 中文显示乱码

    在做宣传品发放系统时,需求要把数据库查询的记录生成表单并转存excel文件. 在转存的EXCEL文件中文显示乱码,表格和其他字符正常,检查后发现是创建EXCEL文件打开模式不对 之前: myfile ...

  3. NPOI 2.0 读取、编辑、保存Excel文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  4. NPOI 2.0 教程

    NPOI2.0帮助官方地址 目录 1. 前言 1.1 NPOI 2.0与NPOI 1.x的区别 1.2 NPOI 2.0模块简介 1.3 自动识别并打开Excel 2003和Excel 2007文件 ...

  5. centos6.5安装tomcat7.0教程(二)

    阅读之前对基本命不熟悉的话, 可以先安装另一文章: http://www.cnblogs.com/duenboa/articles/6665159.html把基本的命令记一下.后面的文章就不重复演示了 ...

  6. discuz X2.0教程]教你快速了解Discuz!程序文件功能,修改文件从此不用再求人

    x3.x数据字典 http://faq.comsenz.com/library/database/x3/x3_index.htm 先从根目录开始,根目录文件一般都是入口,即执行具体功能的代码一般不在这 ...

  7. PHP导出excel文件,第二步先实现自写二维数组加入模板excel文件后导出

    今天主要研究数据加入EXCEL并导出的问题,先不从数据库提取数据导出,自己先写一个二维数组,然后遍历二维数组写入excel模板中导出,首先根据模板excel的内容书写对应的二维数组 $arr=arra ...

  8. RxJava2.0教程

    尝试在新的项目中,引用一些流行的优秀的开源框架,在简书上偶然发现一篇很棒的写RxJava 2.0的帖子,个人认为非常适合Android开发者,你可以先知道怎么使用,然后再弄清楚里面做了哪些事情,例如可 ...

  9. NPOI 2.0 创建Excel文件

    如果只是简单的处理的话,只需要引用下载压缩包里的 NPOI.dll (office 2003)或 NPOI.OOXML.dll (office 2007) 文件而已. using System; us ...

随机推荐

  1. Pots(BFS)

    Pots Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total Submiss ...

  2. 设正整数n的十进制表示为n=ak……a1a0(0<=ai<=9,0<=i<=k,ak!=0),n的个位为起始数字的数字的正负交错之和T(n)=a0+a1+……+(-1)kak,证明:11|n的充分必要条件是11|T(n);(整除理论1.1.2))

    设正整数n的十进制表示为n=ak……a1a0(0<=ai<=9,0<=i<=k,ak!=0),n的个位为起始数字的数字的正负交错之和T(n)=a0+a1+……+(-1)kak, ...

  3. C#第九天

    1.绝对路径和相对路径绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件. 相对路径:文件相对于应用程序的路径. 结论:我们在开发中应该去尽量的使用相对路径. 2.装箱.拆箱 装箱:就是将值类 ...

  4. JSP之JavaBean

    一.定义 1 JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法暴露给其它程序 ...

  5. 自定义VBS脚本(统计在指定文件中搜索字符串出现的次数)

    '=========================================================================='' VBScript Source File - ...

  6. 轻松学会文本处理工具之二 linux sed命令

    sed命令的语法格式: sed的命令格式: sed [option]  'sed command'filename sed的脚本格式:sed [option] -f  'sed  script'fil ...

  7. vb asp.net的一些属性值

    AutoGenerateColumns 就是自动产生列的意思gridview等控件,如果设置了AutoGenerateColumns=true,就能够根据数据源的实际情况,自动生成gridview表格 ...

  8. ASP.NET—013:实现带控件的弹出层(弹出框)

    http://blog.csdn.net/yysyangyangyangshan/article/details/38458169 在页面中用到弹出新页面的情况比较多的,一般来说都是使用JS方法sho ...

  9. Django:之安全、国际化和session

    Django 安全 以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议. 关于安全的官方文档:https://docs.djangoproject.com/en/dev ...

  10. ios根据颜色返回图片

    +(UIImage*) createImageWithColor:(UIColor*) color { CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); ...