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+的处理)的更多相关文章

  1. C#利用NPOI生成具有精确列宽行高的Excel文件

    前言 NPOI是操作Excel的神器,导出导入快如闪电, 但是SetColumnWidth函数个人感觉不会用,怎么弄都无法控制好,因为他是以字符数量去设置宽度,实际上Excel列宽还有个像素的概念,更 ...

  2. 通用化NPOI导出xls

    前言:在导出到xls时有一些通用的元素,比如标题,列标题,内容区域,求和行,但每个xls多少有点不同,为了处理这个问题,可以使用delegate实现,这样可以把差异部分单独处理. //为了处理计算和之 ...

  3. c#将文件复制到某个文件夹内winform文件复制

    try { //系统盘 string nl = Environment.NewLine; string query = "%SystemRoot%"; string str = E ...

  4. [19/04/04-星期四] IO技术_CommonsIO(通用IO,别人造的轮子,FileUtils类 操作文件 & IOUtilsl类 操作里边的内容 )

    一.概念 JDK中提供的文件操作相关的类,但是功能都非常基础,进行复杂操作时需要做大量编程工作.实际开发中,往往需要 你自己动手编写相关的代码,尤其在遍历目录文件时,经常用到递归,非常繁琐. Apac ...

  5. 如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据

    1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packag ...

  6. .net excel利用NPOI导入oracle

    1.链接数据库 引用System.Data.OracleClient: //数据库链接字符串   Data Source如:192.168.5.153:1521/orcl string linkStr ...

  7. .net上传文件,利用npoi读取文件信息到datatable里

    整理代码,.net上传文件,利用npoi读取文件到datatable里,使用了FileUpload控件,代码如下: protected void Button1_Click(object sender ...

  8. 在服务端C#如何利用NPOI构建Excel模板

    目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...

  9. NPOI基本操作XLS

    using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...

随机推荐

  1. LDF文件过大的解决办法

    检查扎兰屯服务器的时候,发现其中一个分区的原空间有300多个G,但只余下了80多个G.检查了一下,发现某库ldf文件过大,竟然达到了280多个G. 这如何得了,再这样下去,硬盘怎能受得了? 尝试用收缩 ...

  2. 菜鸟学习SSH(二)——Struts国际化

    国际化(internationalization,i18n)和本地化(localization,l10n)指让产品(出版物,软件,硬件等)能够适应非本地环境,特别是其他的语言和文化.程序在不修改内部代 ...

  3. javascript每日一练(十)——运动二:缓冲运动

    一.缓冲运动 实现原理:(目标距离-当前距离) / 基数 = 速度(运动距离越大速度越小,运动距离和速度成反比) (500 - oDiv.offsetLeft) / 7 = iSpeed; 需要注意: ...

  4. JVM调优总结(二)-一些概念

    Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了.对于非基本类型的Java对象,其大小就值得商榷. 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有 ...

  5. 17.1 Replication Configuration 复制:

    17.1 Replication Configuration 复制: 17.1.1 How to Set Up Replication 17.1.2 Replication Formats 17.1. ...

  6. 高级特性(6)- 高级Swing

    6.1 列表 6.1.1 JList构件 6.1.2 列表模式 6.1.3 插入和移除值 6.1.4 值的绘制6.2 表格 6.2.1 简单表格 6.2.2 表格模型 6.2.3 对行和列的操作 6. ...

  7. 清华集训2014 day2 task3 矩阵变换

    题目 算法 稳定婚姻系统(其实就是贪心) 一个方案不合法,当且仅当下面这种情况: 设第\(i\)行选了数字\(x\),如果第\(j\)行有一个\(x\)在第\(i\)行的\(x\)后面,并且第\(j\ ...

  8. Linux - 输入输出流程序 代码(C)

    输入输出流程序 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 使用输入输出流,控制文件流. STDIN_FILENO,STDOUT_FILENO代表标准 ...

  9. 【linux kernel】 softirq 软中断讨论

    欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...

  10. jQuery.mobile.changePage() | jQuery Mobile API Documentation

    jQuery.mobile.changePage() | jQuery Mobile API Documentation <script> $.mobile.changePage( &qu ...