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单独拿出来作为一个变量,然后在内层循环能调用,不然的话,会导致只复制到最后一列
				
时间: 2024-10-06 17:54:23

c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-office2007+的处理)的相关文章

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

前言 NPOI是操作Excel的神器,导出导入快如闪电, 但是SetColumnWidth函数个人感觉不会用,怎么弄都无法控制好,因为他是以字符数量去设置宽度,实际上Excel列宽还有个像素的概念,更搞不懂了 //附带SetColumnWidth的用法和注释 [csharp] view plaincopy IWorkbook hssfworkbook = new HSSFWorkbook(); ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1&qu

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

1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packages must be consistent --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17&

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

一.概念 JDK中提供的文件操作相关的类,但是功能都非常基础,进行复杂操作时需要做大量编程工作.实际开发中,往往需要 你自己动手编写相关的代码,尤其在遍历目录文件时,经常用到递归,非常繁琐. Apache-commons工具包中提供了IOUtils/FileUtils,可以让我们非常方便的对文件和目录进行操作. Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织. 在它所支持的Apache项目与子项目

.net excel利用NPOI导入oracle

1.链接数据库 引用System.Data.OracleClient: //数据库链接字符串   Data Source如:192.168.5.153:1521/orcl string linkStr = "User ID=" + name + "; Password=" + password + "; Data Source=" + oraLink; OracleConnection oraCon = new OracleConnection(

WEB版利用NPOI导出数据库数据为Excel文件

上一篇中,我已经提供了NPOI的dll文件下载 没有下载的同学可以通过上一篇进行下载 这里就直接上Demo代码 前台代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="导出到Excel.aspx.cs" Inherits="导出到Excel" %> <!DOCTYPE html> <html xmlns="http://w

ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)

网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的Excel有三列(姓名.年龄.性别)//列之间用\t隔开StringWriter sw = new StringWriter();sw.WriteLine("姓名\t年龄\t性别"); //Excel表格的列标题 sw.WriteLine("张三\t29\t男"); /

C#利用NPOI导出Excel类(简单版)

代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespace ahwildlife.Utils { /// <summary> /// Excel工具类 /// 利用NPOI生成Excel /// </summary> public class ExcelUtil { #region 生成Excel /// <summary> /

利用npoi把多个DataTable导入Excel多个sheet中

{ 题外拓展:把datatable插入dataset DataTable fuben = new DataTable();//定义的datatablefuben = table.Tables[0].Copy(); 把获取的datatable复制到新的表中fuben.TableName = "sheet" + userid + "";定义表名ds.Tables.Add(fuben);插入dataset 之所以这么麻烦是因为 我用了返回dataset的方法来获取的dat

C#基于NPOI生成具有精确列宽行高的Excel文件的方法

本文实例讲述了C#基于NPOI生成具有精确列宽行高的Excel文件的方法,是非常具有实用价值的技巧分享给大家供大家参考.具体方法如下:. 一.前言 NPOI是操作Excel的神器,导出导入快如闪电, 但是SetColumnWidth函数个人感觉不会用,怎么弄都无法控制好,因为他是以字符数量去设置宽度,实际上Excel列宽还有个像素的概念,更难搞懂了. //附带SetColumnWidth的用法和注释 IWorkbook hssfworkbook = new HSSFWorkbook(); ISh