NPOI 2.0 教程(二):编辑既存的EXCEL文件
转载请注明出处 http://blog.csdn.net/fujie724
上一篇中讲了用NPOI创建新EXCEL文件的基本方法,但有时候我们需要的是对一个已有的EXCEL文件进行编辑修改。那么用NPOI该怎么做呢?
请接着学习
在这一篇里,我们读入上一篇教程中生成的EXCEL,然后以其做为模版,修改之后保存为另一份EXCEL
第一步
- //上一篇教程中生成的文件
- 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这个类就和第一篇教程里一样了。
必须要遵循的一个规则是,如果你要编辑的行和单元格,原本没有值,或者从未创建过的,就必须先创建。
如:
我要使用第二行第一列的单元格,在上一篇教程中并未对这个位置进行创建,那么必须先创建。
- //在第二行创建行
- 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)就会报空对象的错误。
在上一篇教程中,我们已经对该文件的第一行第一列的这个位置创建过单元格,并且赋值,所以可以直接使用,采用下面的方式。
- //获取第一行
- IRow row = sheet.GetRow(0);
- //在第一行获取第一列单元格
- ICell cell = row.GetCell(0);
//获取第一行
IRow row = sheet.GetRow(0);
//在第一行获取第一列单元格
ICell cell = row.GetCell(0);
上面两种写法也可以简写成如下的方式
- //创建第二行,第一列
- 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()函数对其赋值即完成编辑。
当然,赋值语句也可以和上述语句并作一行书写。例如
- sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");
sheet.GetRow(0).GetCell(0).SetCellValue("编辑的值");
第三步
编辑完之后需要保存
- 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();
}
这样就完成了读入已有文件,编辑,保存。
NPOI 2.0 教程(二):编辑既存的EXCEL文件的更多相关文章
- 【Java/JDBC】借助ResultSetMetaData,从数据库表中抽取字段信息存成Excel文件
本例工程下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-3.rar 工作中曾有个为42张表建立测 ...
- HTML 表单 存为EXCEL文件时 中文显示乱码
在做宣传品发放系统时,需求要把数据库查询的记录生成表单并转存excel文件. 在转存的EXCEL文件中文显示乱码,表格和其他字符正常,检查后发现是创建EXCEL文件打开模式不对 之前: myfile ...
- NPOI 2.0 读取、编辑、保存Excel文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 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文件 ...
- centos6.5安装tomcat7.0教程(二)
阅读之前对基本命不熟悉的话, 可以先安装另一文章: http://www.cnblogs.com/duenboa/articles/6665159.html把基本的命令记一下.后面的文章就不重复演示了 ...
- discuz X2.0教程]教你快速了解Discuz!程序文件功能,修改文件从此不用再求人
x3.x数据字典 http://faq.comsenz.com/library/database/x3/x3_index.htm 先从根目录开始,根目录文件一般都是入口,即执行具体功能的代码一般不在这 ...
- PHP导出excel文件,第二步先实现自写二维数组加入模板excel文件后导出
今天主要研究数据加入EXCEL并导出的问题,先不从数据库提取数据导出,自己先写一个二维数组,然后遍历二维数组写入excel模板中导出,首先根据模板excel的内容书写对应的二维数组 $arr=arra ...
- RxJava2.0教程
尝试在新的项目中,引用一些流行的优秀的开源框架,在简书上偶然发现一篇很棒的写RxJava 2.0的帖子,个人认为非常适合Android开发者,你可以先知道怎么使用,然后再弄清楚里面做了哪些事情,例如可 ...
- NPOI 2.0 创建Excel文件
如果只是简单的处理的话,只需要引用下载压缩包里的 NPOI.dll (office 2003)或 NPOI.OOXML.dll (office 2007) 文件而已. using System; us ...
随机推荐
- quicksort快排
废话不多说,上代码: void quicksort(int x[], int lo, int hi){ int i = lo, j = hi; ]; while(i <= j){ while(x ...
- C++ 类的继承、虚拟继承、隐藏、占用空间
主函数: #include <iostream> #include "test.h" #include "testfuc.h" using name ...
- Spring 接收表单List集合数据
4种方法,详情见:http://blog.csdn.net/lutinghuan/article/details/46820023 第一种: 1.新增类,其中有属性为该对象的集合 public cla ...
- UEFI BIOS模式下Windows系统启动过程以及引导文件修复方法
有关UEFI BIOS基础知识的简介,一年前在网易博客做过详细的概述.鉴于某些网友仍然对UEFI下Windows的启动过程不甚了解,虽然网上有各式各样的启动修复工具,但是对于新手来说,如果不明白其中的 ...
- [WPF] 浏览百度地图并获取经纬度地址信息
项目中需要利用登记的区域和地址在百度地图上定位,并获取该地址的经纬度. 本次功能对我来说主要难点如下:1.百度地图API的基本使用方法,请首选使用百度地图的JavaScript大众版(PS:之前使用W ...
- 百度地图与融云的“冲突”(APP的.so手机架构目录,与Library的.so的手机架构目录冲突)
在项目引进融云的IMkit时,总是报百度地图的错误,最开始以为是65535的错误,然后试着去改下百度地图,错误原因是在IMKit里面,它的.so库有这么几个目录 而我的app的libs里面的百度地图的 ...
- hdu_5776_sum(前缀和维护)
题目链接:hdu_5776_sum 题意: 给你一串数,问你是否有一个连续的子序列的和为m的倍数 题解: 维护一个前缀和%m的值,如果前缀和%m的值为0或者有两个前缀和%m的值相同,那么就有一个连续区 ...
- hdu_2838_Cow Sorting(树状数组求逆序对)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2838 题意:给你一串数,让你排序,只能交换相邻的数,每次交换花费交换的两个树的和,问最小交换的价值 题 ...
- ice调通过iceReplica用所有server instance的方法---客户端控制服务端的负载均衡
I 使用此方法,可以增量的通知Ice服务配置的改变,刷新每个服务进程的数据 可以手动控制客户端调用的负载均衡,客户端程序决定将请求发往那个进程 上代码: import logging import I ...
- 运维必备:Oracle自备份精简教程(linux及win)
Oracle在linux环境下的自动备份 1.自动导出及历史文件删除脚本 su - oracle<<EOF cd /db_backup/databak mv orabak*.* /db_b ...