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

 更新时间:2022年02月21日 11:39:50   作者:恶势力-从底层码农开始  
这篇文章主要为大家详细介绍了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文件的导入导出功能到这里全部完成

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

相关文章

  • C#简单实现表达式目录树(Expression)

    C#简单实现表达式目录树(Expression)

    表达式目录树以数据形式表示语言级别代码。数据存储在树形结构中。表达式目录树中的每个节点都表示一个表达式。这篇文章给大家介绍C#简单实现表达式目录树(Expression),需要的朋友参考下吧
    2017-11-11
  • C#9.0主要特性的一些想法

    C#9.0主要特性的一些想法

    这篇文章主要给大家介绍了关于C#9.0主要特性的一些想法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C#图像处理之浮雕效果实现方法

    C#图像处理之浮雕效果实现方法

    这篇文章主要介绍了C#图像处理之浮雕效果实现方法,可实现图片转换成浮雕效果的功能,需要的朋友可以参考下
    2015-04-04
  • C#获取上个月第一天和最后一天日期的方法

    C#获取上个月第一天和最后一天日期的方法

    这篇文章主要介绍了C#获取上个月第一天和最后一天日期的方法,是关于C#日期函数的简单应用,具有一定的实用价值,需要的朋友可以参考下
    2014-11-11
  • C#实现合并多张图片为GIF动态图

    C#实现合并多张图片为GIF动态图

    这篇文章主要为大家详细介绍了C#如何将把一张又一张的图片去拼合成一张GIF动态图片,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C#基础教程之IComparable用法,实现List<T>.sort()排序

    C#基础教程之IComparable用法,实现List<T>.sort()排序

    这篇文章主要介绍了C#的一些基础知识,主要是IComparable用法,实现List<T>.sort()排序,非常的实用,这里推荐给大家。
    2015-02-02
  • C#生成饼形图及添加文字说明实例代码

    C#生成饼形图及添加文字说明实例代码

    这篇文章主要介绍了C#生成饼形图及添加文字说明的方法,非常实用的功能,需要的朋友可以参考下
    2014-07-07
  • C#中TextBox的横线样式及占位提示详解

    C#中TextBox的横线样式及占位提示详解

    横线样式就是将TextBox以一条底横线的形式展示在页面,占位提示就是Web的Placeholder属性,即在输入框没有内容的时候进行一个输入提示。本文主要介绍了C#中TextBox的这两个的实现,需要的可以参考一下
    2022-11-11
  • C# 键盘Enter键取代Tab键实现代码

    C# 键盘Enter键取代Tab键实现代码

    这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
    2013-11-11
  • C#中事件的继承实例分析

    C#中事件的继承实例分析

    这篇文章主要介绍了C#中事件的继承,通过一个面向对象程序实例来说明子类调用父类事件的实现方法,需要的朋友可以参考下
    2014-08-08

最新评论