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. MVC整个样例的源代码

    以下就是整MVC样例的源代码: #windows应用程序 #开发者:蔡军生(QQ:9073204) 深圳 2014-9-24 #使用类来描写叙述 from ctypes import * from c ...

  2. docker学习笔记4:利用docker hub上的mysql镜像创建mysql容器

    docker hub上有官方的mysql镜像,我们可以利用它来创建mysql容器,作为一个服务容器使用. 1.下载mysql镜像 docker pull mysql 2.创建镜像 docker run ...

  3. zookeeper 分布式应用好处

    <pre name="code" class="html"> 举个例子 比如我以前通过haproxy 负载两台tomcat8082 比如api01 ...

  4. Unix/Linux环境C编程新手教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装

    远观历史, MySQL的主要目的是为了可以在单处理器核心的商业服务器上执行.现在MySQL的一个变化用户可能不会注意到,那就是甲骨文已经開始又一次架构MySQL的代码,使它大量的模块化.如软件解析器, ...

  5. HDU 4336 Card Collector(动态规划-概率DP)

    Card Collector Problem Description In your childhood, do you crazy for collecting the beautiful card ...

  6. Swift学习笔记十三:继承

    一个类能够继承(inherit)还有一个类的方法(methods),属性(property)和其他特性 一.基本的语法 class Human{ var name :String init(){ na ...

  7. JQuery EasyUI框架学习

    前言 新项目的开发前端技术打算採用EasyUI框架(基于EasyUI较为丰富的UI组件库),项目组长将前端EasyUI这块的任务分配给了我.在进行开发之前,须要我这菜鸟对EasyUI框架进行一些基础的 ...

  8. IOS7上呈现IOS6的水滴刷新效果

    IOS7上呈现IOS6的水滴刷新效果    到了IOS7 发现自带的刷新 不再是 IOS6自带的水滴效果了 你是否怀念那IOS6的效果呢? 哈哈,于是收集各方资料,整理编写一个属于自己的水滴刷新效果 ...

  9. javascript笔记整理(函数)

    javascript函数的声明和调用将完成某一特定功能的代码集合起来,可以重复使用的代码块. 一.函数的声明方式(创建) A.基本语法(function  关键字)function 函数名([参数1] ...

  10. Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法

    Genymotion 插件已更新至 1.0.6,目前无法初始化的问题已经解决. ------------------------------------------------------------ ...