c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-office2007+的处理)
1.程序界面
每次需要处理excel文件的时候,都是去百度找方案,真是气一头火,今天好好总结一下,下次就不用度娘了。
我是用winform来试验的,因为winform比较方便测试,实际上只要是在.net平台上,c#写的程序,都是通用的。

2.所需dll下载地址
npoi.zip 这里包含了所有所需要的dll文件,引入到项目中就可以了
3.代码
public void writeExcel(string readExcelPath, string writeExcelPath)
{
//需要读取的excel信息
FileStream file = new FileStream(readExcelPath, FileMode.Open, FileAccess.Read);
HSSFWorkbook book = new HSSFWorkbook(file);
HSSFSheet sheet = (HSSFSheet)book.GetSheetAt(0); //需要写入的excel信息 XSSFWorkbook是处理xlsx即excel2007+以上文件的
FileStream writeFile = new FileStream(writeExcelPath, FileMode.Open, FileAccess.Read);
XSSFWorkbook writeBook = new XSSFWorkbook(writeFile);
XSSFSheet writeSheet = (XSSFSheet)writeBook.GetSheetAt(0); for (int i = 0; i < sheet.LastRowNum + 1; i++)
{
//获取第i行,得到对象
IRow row = sheet.GetRow(i);
//新建第i行,并返回得到的对象
IRow writeRow = writeSheet.CreateRow(i);
for (int j = 0; j < row.LastCellNum+1; j++)
{
ICell cell = row.GetCell(j);
if (cell == null)
{
break;
}
//这句话是设置单元格类型为string类型,否则如果单元格内容为numeric的话,会抛出异常
row.GetCell(j).SetCellType(CellType.STRING);
string readValue = sheet.GetRow(i).GetCell(j).StringCellValue; if (string.IsNullOrEmpty(readValue))
{
continue;
}
//新建第i行,第j列
writeRow.CreateCell(j);
writeSheet.GetRow(i).GetCell(j).SetCellValue(readValue);
textBox3.Text += readValue;
}
}
//保存的地址,我做了处理,不让他保存在我选择的地址上,实际上不处理的话也没有问题
string savePath = textBox2.Text.Replace(".xlsx","_bak.xlsx");
FileStream saveFile = new FileStream(savePath, FileMode.Create);
//将处理后的文件保存到新文件中去
writeBook.Write(saveFile);
saveFile.Close();
file.Close();
MessageBox.Show("处理excel完毕");
}
3.注意事项
①HSSFWorkbook ,HSSFSheet是处理excel2003的,XSSFWorkbook,XSSFSheet是处理excel2007+的,切忌,一定不能少引用文件
② IRow writeRow = writeSheet.CreateRow(i);这句话要放在第一层循环外面,要把IRow单独拿出来作为一个变量,然后在内层循环能调用,不然的话,会导致只复制到最后一列
c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-office2007+的处理)的更多相关文章
- C#利用NPOI生成具有精确列宽行高的Excel文件
前言 NPOI是操作Excel的神器,导出导入快如闪电, 但是SetColumnWidth函数个人感觉不会用,怎么弄都无法控制好,因为他是以字符数量去设置宽度,实际上Excel列宽还有个像素的概念,更 ...
- 通用化NPOI导出xls
前言:在导出到xls时有一些通用的元素,比如标题,列标题,内容区域,求和行,但每个xls多少有点不同,为了处理这个问题,可以使用delegate实现,这样可以把差异部分单独处理. //为了处理计算和之 ...
- c#将文件复制到某个文件夹内winform文件复制
try { //系统盘 string nl = Environment.NewLine; string query = "%SystemRoot%"; string str = E ...
- [19/04/04-星期四] IO技术_CommonsIO(通用IO,别人造的轮子,FileUtils类 操作文件 & IOUtilsl类 操作里边的内容 )
一.概念 JDK中提供的文件操作相关的类,但是功能都非常基础,进行复杂操作时需要做大量编程工作.实际开发中,往往需要 你自己动手编写相关的代码,尤其在遍历目录文件时,经常用到递归,非常繁琐. Apac ...
- 如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据
1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packag ...
- .net excel利用NPOI导入oracle
1.链接数据库 引用System.Data.OracleClient: //数据库链接字符串 Data Source如:192.168.5.153:1521/orcl string linkStr ...
- .net上传文件,利用npoi读取文件信息到datatable里
整理代码,.net上传文件,利用npoi读取文件到datatable里,使用了FileUpload控件,代码如下: protected void Button1_Click(object sender ...
- 在服务端C#如何利用NPOI构建Excel模板
目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...
- NPOI基本操作XLS
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...
随机推荐
- 开源 免费 java CMS - FreeCMS1.9 职位管理
项目地址:http://code.google.com/p/freecms/ 职位管理 管理职位,实现招聘功能. 1. 职位管理 从左側管理菜单点击职位管理进入. 2. 加入职位 在职位列表下方点击& ...
- vector的成员函数解析
vector是线性容器,它的元素严格的依照线性序列排序,和动态数组非常相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅能够使用迭代器(iterator)訪问元素,还能够使用指针 ...
- 将一个int转成二进制c
/* 由于是2位 十进制整数,所以转化后可以存 一个int 型中: reverse函数 提供了这种转化 如果需要转化的数字比较大int存不下,则需要数组来存 */ #include<stdio. ...
- Ibatis的分页机制的缺陷
我们知道,Ibatis为我们提供了可以直接实现分页的方法 queryForList(String statementName, Object parameterObject, int skipResu ...
- Linux下Nginx+tomcat应用系统性能优化
软件环境及服务器配置如下: Linux rh6.3,Tomcat7.0.29,Nginx1.2.7 mysql5.1,jdk1.6.0 mysql5.1 memcached 1.4.15 Xeno 2 ...
- 解决QT Creator在Linux下的输入法问题
https://vjudge1.github.io/2014/04/02/type-chinese-in-linux/http://blog.csdn.net/ubuntutouch/article/ ...
- Jquery学习笔记:操作form表单元素之一(文本框和下拉框)
一.概述 在web页面开发中,经常需要获取和设置表单元素的值(如文本框中的内容),特别是在ajax应用中,更是常态.本文系统的介绍下如何操作. 同操作其它html元素一样,操作的过程差不多. 第一步, ...
- Boost学习之可移植路径操作--filesystem
Boost.Filesystem 库为对路径.文件和目录进行查询和操作提供了可移植的工具,已经被C++标准委员会接纳包含到TR2中. 编译 使用Boost.Filesystem 库之前要先编译它,请参 ...
- 一步一步重写 CodeIgniter 框架 -- 原因和思路
CodeIgniter 是一个非常轻量级的 PHP 框架,说是轻量级,最新版的代码只有不到2M. 其最重要的特点就是 MVC 模式来编写代码,如果大家看过一些用 PHP 来编写网站的书籍或教程,无一例 ...
- opencv实现连通域
在本文中使用图像连通域统计使用opencv中的cvFloodFill方法,可是在cvFloodFill方法中CvConnectedComp參数无法返回详细点坐标位置信息,找了些资料.给CvSeq分配空 ...