C#使用NPOI实现Excel导入导出功能

本文实例为大家分享了C#使用NPOI实现Excel导入导出的具体代码,供大家参考,具体内容如下

Excel导入

使用OpenFileDiolog控件和button结合,选择文件导入,将路径显示在文本框

设置按钮点击事件,将文件路径赋给textBox.Text

private void Department_SUM_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.ShowDialog();

            textBox1.Text = open.FileName;
        }

实现excel导入,通过textBox1.Text来获取文件路径

private void button_Excel_Click(object sender, EventArgs e)
        {
          
            FileStream fs = null;
            IWorkbook workbook = null;
            ISheet sheet = null;
            IRow row = null;
             String txtpath = textBox1.Text;
            
            fs = File.OpenRead(txtpath);
            workbook = new XSSFWorkbook(fs);

            if (workbook != null)
            {
                sheet = workbook.GetSheetAt(0); //获取excel表格的第一个sheet
                if (sheet != null)
                {
                    //行的LastRowNum是0~N-1
                    //列的LastCellNum是1~N
                    int rowCount = sheet.LastRowNum;

                    if (rowCount > 0)
                    {

                        IRow firstrow = sheet.GetRow(0);
                        int cellCount = firstrow.LastCellNum;
                        

                        for (int i = 0; i <= rowCount - 1; i++)
                        {
//获取行的第6和第7列数据,如果cell类型是文本,则通过StringCellValue取值
//如果cell类型是数值,则通过NumericCellValue来取值
                            row = sheet.GetRow(i + 1);
                           row.Cells[5].NumericCellValue;
                        row.Cells[6].StringCellValue;
//可以将Cell的数据存放在list中,这里假设将两列cell的数据存入list1,list2
                        }

                        fs.Close();

                    }
        //实际存放DataTable的位置

        //调用自定义方法,实现导出
        Add_DataTable_To_Excel(txtpath, table, sheet_name);
                }
            }

要实现excel导出,先将程序中的excel存为DataTable格式
本段代码存在于上面代码“//实际存放DataTable的位置”位置

DataTable table = new DataTable();
            DataRow dr;

            table.Columns.Add("列名1", System.Type.GetType("System.String"));
            table.Columns.Add("列名2", System.Type.GetType("System.Double"));

            for (int i = 0; i < list4.Count; i++)
            {
                dr = table.NewRow();
                dr["列名1"] = list1i];
                dr["列名2"] = list2[i].ToString("0.0000"); //将存入的数据格式保存为保留四位小数
                
                table.Rows.Add(dr);
            }

通过方法导出excel,传参为文件路径,DataTable,表名
通过获取要导入数据的目标excel的内容,导入数据,要将excel导出的方式

public bool Add_DataTable_To_Excel(string output_file_path, DataTable dt, string sheet_name)
        {

FileStream fs = null;
            IWorkbook workbook = null;

            ISheet sheet = null;

            IRow row = null;
XSSFWorkbook xssfworkbook = null;

             fs = new FileStream(output_file_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            xssfworkbook = new XSSFWorkbook(fs);
            sheet = xssfworkbook.GetSheet(sheet_name);

//设置马上要使用的Cell数据格式
            IDataFormat dataformat = xssfworkbook.CreateDataFormat();

            ICellStyle style0 = xssfworkbook.CreateCellStyle();
            style0.DataFormat = dataformat.GetFormat("0.0000");

            ICellStyle style1 = xssfworkbook.CreateCellStyle();
            style1.DataFormat = dataformat.GetFormat("0.00%");

if (sheet != null)
            {
                int rowCount = sheet.LastRowNum;

                if (rowCount > 0)
                {

                    IRow firstrow = sheet.GetRow(0);
                    int cellCount = firstrow.LastCellNum;

for (int i = 0; i <= rowCount - 1; i++)
                    {

                        row = sheet.GetRow(i + 1);
                        //表中有行为空,将空的行影响消除
                        if (!"".Equals(row.Cells[code_index].StringCellValue))
                        {
                            row = sheet.GetRow(i + 1);

                            for (int j = 0; j <= dt.Rows.Count - 1; j++)
                            {
                                if (row.Cells[code_index].StringCellValue.Equals(dt.Rows[j][0]))
                                {

   //遍历将DataTable中的数据存入Cell的值   row.Cells[1].SetCellValue(Convert.ToDouble(dt.Rows[j][0].ToString()));
                               row.Cells[1].CellStyle = style0;
                               row.Cells[2].SetCellValue(Convert.ToDouble(dt.Rows[j][1].ToString()) / Convert.ToDouble(dt.Rows[j][1].ToString()));
                                    row.Cells[2].CellStyle = style1;
                                    
                                }
                            }

                        }

                    }

              }

 }

//导出excel
MemoryStream stream = new MemoryStream();
xssfworkbook.Write(stream);

   var buf = stream.ToArray();

    using (FileStream fss = new FileStream(txtpath, FileMode.Create, FileAccess.Write))        //保存为Excel文件
            {
                fss.Write(buf, 0, buf.Length);
                fss.Flush();
            }

            return true;
}

基础的Excel文件的导入导出功能到这里全部完成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于NPOI用C#开发的Excel以及表格设置

    本文为大家分享了基于NPOI用C#开发的Excel以及表格设置,供大家参考,具体内容如下 最近在项目中需要导出Excel.在这里做个记录.在网上查阅了一些资料.将自己最终的代码分享在这里,以供自己日后查阅,如果能给陌生的你带来方便,那便更好. 开发的过程中也遇到了一个问题,设置字体会导致打开Excel时报错(错误:此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数),并且设置失败.这个问题产生的原因是因为频繁的创建字体,这个在我参考的代码中是有问题,我做了些改善.如果你有更优的方

  • C#使用NPOI库读写Excel文件

    本文实例为大家分享了C#使用NPOI库读写Excel文件的具体代码,供大家参考,具体内容如下 第一步添加程引用 : 右键项目工程 — 管理 NuGet程序包 — 搜索 NOPI — 安装 对文件Excel进行操作 读取excel文件 private IWorkbook wk;   private FileStream fs;  private void OpenExcel(string path)         {             StringBuilder sbr = new Str

  • c# 根据NPOI 读取一个excel 文件的多个Sheet

    大家都知道NPOI组件可以在你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有sheet 要怎么做呢? 下面就来告诉大家如何操作NPOI 读取excel 的所有sheet. 首先我们先讲解操作excel 单独创建的一个类,我命名为 EXECLHELP using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF

  • C#通过NPOI操作Excel的实例代码

    C#操作Excel的方法有很多种,常见的有微软官方的OLE Automation,Apache的POI等.这里介绍的是POI翻译成C#的NPOI. POI是Apache的通过Java操作Office的一个API,可以对Excel,Word,PPT等进行操作,十分的强大.然后就被翻译成C#版本的NPOI了,和log4j与log4net很相似. 好像在NPOI的.net4.0版本之前是不支持office2007及以上的XML格式的,但是最新的版本已经支持了.只需要下载并引用下面五个程序集就能使用了.

  • C#使用NPOI导入Excel的方法详解

    本文实例讲述了C#使用NPOI导入Excel的方法.分享给大家供大家参考,具体如下: NPOI是由国人开发的一个进行excel操作的第三方库.百度百科介绍如下:NPOI 本文主要介绍如何使用NPOI将Excel数据读取. 首先引入程序集: using System.IO; using System.Reflection; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.Web; 然后定位到文件位置: string

  • C#实现NPOI的Excel导出详解

    技术点: 1.自定义attribute属性 2.通过反射取类及其属性的attribute属性值 3.NPOI包常用属性及方法(我也仅仅知道用到过的,陌生的要么见名知意,要么百度查) 实现功能点: List类对象的模板导出,实用场景例子见最后代码块(emm...还是比较抽象,代码见) EXCEL导出类DTO超类 定义继承导出类DTO的特性说明类 Excel帮助类 这部分要讲的点其实挺多的,关键就是EXCEL导出所用到的数据源是强类型的. 可以看出来list其实是EF的Queryable toLis

  • C# 基于NPOI操作Excel

    目录 1 单元格下拉框 2 添加批注 3 读取数据 结语 常见问题解决 NPOI 导出添加批注功能 POI导出Excel时下拉列表值超过255的问题 日期格式导入混乱 注意 1 单元格下拉框 在开发中我们会遇到为单元格设置下拉框.一般可以编写如下: var cellRanges = new CellRangeAddressList(firstRow, lastRow, firstCol, latsCol); DVConstraint constraint = DVConstraint.Creat

  • C#使用NPOI将List数据导出到Excel文档

    NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写. 这里简单封装了一个使用NPOI导出Excel的DLL,方便项目使用.步骤如下: 1.NuGet包管理器添加对NPOI和log4net的安装引用 2.添加Excel属性信息类ExcelProperty.cs /// <summary> /// 用于定义导出的excel属性 /// </summary>

  • C#使用NPOI导出Excel类封装

    ** NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目.** 以下代码主要分3部分:通过实体类的自定义特性导出Excel文件 1.封装类:ExcelHelper2.实体类:StudentModel3.调用:Form1 ExcelHelper  /// <summary> /// Excel操作类 /// </summary&g

  • C#使用NPOI实现Excel和DataTable的互转

    什么是NPOI? NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目. 使用NuGet安装NPOI NuGet直接搜索NPOI,目前版本是v2.4.1,将其安装至项目即可. 安装完成后,项目会自动为我们添加这4个引用 同时还需要在程序中引入NPOI.SS.UserModel;NPOI.XSSF.UserModel;NPOI.HSSF.U

随机推荐