NPOI 2.0 教程(二):编辑既存的EXCEL文件

NPOI 2.0 教程(二):编辑既存的EXCEL文件

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

c#excelNPOI

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

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

请接着学习

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

第一步

[csharp] view plaincopyprint?

  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这个类就和第一篇教程里一样了。

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

如:

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

[csharp] view plaincopyprint?

  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)就会报空对象的错误。

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

[csharp] view plaincopyprint?

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

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

[csharp] view plaincopyprint?

  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()函数对其赋值即完成编辑。

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

[csharp] view plaincopyprint?

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

第三步

编辑完之后需要保存

[csharp] view plaincopyprint?

  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();
}

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

时间: 2024-07-28 16:06:29

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

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

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; namespace ReadExcel { class Program { static void Main(string[] args) { //要操作的excel文件路径 string

给初学者的RxJava2.0教程(二)

前言 上一节教程讲解了最基本的RxJava2的使用, 在本节中, 我们将学习RxJava强大的线程控制. 正题 还是以之前的例子, 两根水管: RxJava 正常情况下, 上游和下游是工作在同一个线程中的, 也就是说上游在哪个线程发事件, 下游就在哪个线程接收事件. 怎么去理解呢, 以Android为例, 一个Activity的所有动作默认都是在主线程中运行的, 比如我们在onCreate中打出当前线程的名字: @Override protected void onCreate(Bundle s

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

今天主要研究数据加入EXCEL并导出的问题,先不从数据库提取数据导出,自己先写一个二维数组,然后遍历二维数组写入excel模板中导出,首先根据模板excel的内容书写对应的二维数组 $arr=array(array("111-3004394-8497032","UMN207-05MM","UMN207-05MM","2","Eric S Herbert / Entergy","600 Rockyh

【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)

Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个基于NPOI的Excel操作类(至于为什么不用Excel组件,那是因为Excel组件效率低且必须安装Office),所完成的功能大致如上所示,这样平时的报表开发效率就比原来高效很多. 首先是DataTable导出至Excel文件,代码关键部分有注释说明,具体代码如下所示: /// <summary>

Java 读取excel文件 兼容97-2013 V2.0

注释里有struts的上传文件和Springmvc有些不一样.读写都是一样的 修复删除缓存文件占用的问题 package com.telling.cw.util.poi; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.xssf.us

零基础快速入门SpringBoot2.0 教程(二)

一.SpringBoot2.x使用Dev-tool热部署简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用 官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools 核心依赖包: <dependency> <groupId>org.springframework.boot</gro

Shell脚本系列教程二: 开始Shell编程

Shell脚本系列教程二: 开始Shell编程 2.1 如何写shell script? (1) 最常用的是使用vi或者mcedit来编写shell脚本, 但是你也可以使用任何你喜欢的编辑器; (2) 脚本写好之后, 要给脚本设置可执行权限: 语法为: chmod  [option]  mode  script-name $ chmod +x script-name # 对所有用户(a, 默认) $ chmod 775 script-name 这里, 775这3个数字分别表示此文件对于用户(u)

ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用"文件比较"看有损.无损 在前两篇教程中,扯了一大堆JPG文件的有损压缩,平时在网上也经常看到一些人整天把有损.无损挂在嘴边,但具体是否真的无损?有损又损了多少.损在哪里?讲得清的人就真心不多了.CEP从v4.13开始提供"文件比较"功能,可用于定量比较有损.无损. 按照CEP的使用说明,"

PySide——Python图形化界面入门教程(二)

PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 原文链接:http://pythoncentral.io/pyside-pyqt-tutorial-interactive-widgets-and-layout-containers/ 上一个教程中,我们了解了一些QWidget提供的功能,还有一个特殊的子类QLabel.更进一步的,我们完成了一个用来说明简单Python/Q