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 ...
随机推荐
- Jekyll搭建过程详解
原先博客用Jekyll搭建在Github上,近来访问缓慢,而且markdown不太方便写,故决定在博客园安个新家. 文章见Github博客: 搭建过程:http://wuxichen.github.i ...
- IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色
直接在代码 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UII ...
- 最新Cocos2d-x3.2开发环境搭建(windows环境下)
原文地址:http://cache.baiducontent.com/c?m=9d78d513d9921cfe05ac837f7d16c067690297634d9dc7150ed58449e3735 ...
- 演练5-5:Contoso大学校园管理系统5
Contoso University示例网站演示如何使用Entity Framework 5创建ASP.NET MVC 4应用程序. Entity Framework有三种处理数据的方式: Data ...
- uva 10313 Pay the Price(完全背包)
题目连接:10313 - Pay the Price 题目大意:有0~300这300种价值的金额. 现在可能给出参数: 1个:n, 输出可以组成价值n的方式的个数. 2个:n, a输出用个数小于a的价 ...
- 存几个html画图的网站
http://jvectormap.com/ http://julying.com/lab/raphael-js/docs/#Paper.path http://www.highcharts.com/ ...
- Java 螺纹第三版 第三章数据同步 读书笔记
多线程间共享数据问题 一.Synchronizedkeyword atomic一词与"原子"无关,它以前被觉得是物质的最小的单元,不能再被拆解成更小的部分. 当 ...
- bin文件格式分析
xip 的 bin 文件分析 一个bin 文件在存储上是按以下的结构存储的 组成:标记(7)+Image開始地址(1)+Image长度(1) 记录0地址+记录0长+记录0校验和+ ...
- 消息对话框(MessageBox)用法介绍
在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: 1.调用API中的MessageBox ...
- Swift - 短信发送功能的实现
使用MessageUI.framework框架可以实现短信发送功能,步骤如下: (1)首先判断设备是否有发送短信功能 (2)如果设备允许发送短信,创建一个MFMessageComposeViewCon ...