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

作者:恶势力-从底层码农开始 时间:2022-11-01 22:36:19 

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

Excel导入

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

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

设置按钮点击事件,将文件路径赋给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格式
本段代码存在于上面代码&ldquo;//实际存放DataTable的位置&rdquo;位置

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文件的导入导出功能到这里全部完成

来源:https://blog.csdn.net/qq_48591625/article/details/108190904

标签:C#,Excel,导入导出
0
投稿

猜你喜欢

  • Flutter进阶之实现动画效果(六)

    2023-09-15 15:13:50
  • Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    2023-10-05 04:20:53
  • android开机自启动app示例分享

    2023-02-20 18:04:29
  • Android自定义View之渐变色折线图的实现

    2023-09-23 21:43:03
  • IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装)

    2022-07-23 19:18:54
  • Android 动态菜单实现实例代码

    2023-05-19 16:24:58
  • 深入委托与多播委托的详解

    2023-05-29 07:07:15
  • synchronized背后的monitor锁实现详解

    2023-07-31 08:14:10
  • spring中的FactoryBean代码示例

    2023-11-11 18:37:20
  • android开发之调用手机的摄像头使用MediaRecorder录像并播放

    2021-12-27 12:50:18
  • Java模拟有序链表数据结构的示例

    2023-09-26 22:25:30
  • Java Scanner输入两个数组的方法

    2022-06-07 08:21:20
  • Java代码精简之道(推荐)

    2023-07-28 02:00:05
  • C#用Activex实现Web客户端读取RFID功能的代码

    2021-10-28 21:07:36
  • Android控件View的文字周围添加图标

    2023-02-20 04:04:44
  • Java如何在PDF中添加ToolTip工具提示

    2021-12-31 12:12:53
  • c# 使用线程对串口serialPort进行收发数据(四种)

    2023-06-20 13:05:48
  • java中 String和StringBuffer的区别实例详解

    2023-06-19 18:48:31
  • C#实现读取匿名对象属性值的方法示例总结

    2023-02-02 18:56:03
  • WPF自定义实现IP地址输入控件

    2022-02-24 05:35:36
  • asp之家 软件编程 m.aspxhome.com