C# Excel数据合并

Posted 老刘讲编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Excel数据合并相关的知识,希望对你有一定的参考价值。

今天讲一个用C#实现Excel数据合并
源码下载地址:https://download.csdn.net/download/ssssswsrjhtdj/18398536
预览效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
核心代码:
“Excel数据合并”按钮点击代码

Stopwatch sw = new Stopwatch();
            sw.Start();
            //dataGridView1.DataSource = NPOIExcel.ExcelToDataTable("电脑统计表.xlsx", true);//方式1
            DataTable[] tempTable = new DataTable[sheetCount];
            folderBrowserDialog1.ShowDialog();
            DirectoryInfo dir = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
            for (int i = 0; i < sheetCount; i++) //遍历一个excel的每个sheet
            {
                bool flag = true;
                foreach (FileInfo dChild in dir.GetFiles("*.xlsx"))//遍历文件夹下的xlsx文件
                {
                    tempTable[i] =  NPOIExcel.ExcelToTable(dChild.FullName, i);//方式2

                    if (flag && lastTable[i] == null&& tempTable[i] != null) //第一次直接赋值,使得lastTable[i]获取表结构不为null
                    {

                        lastTable[i] = tempTable[i];

                        flag = false;
                    }
                    if (tempTable[i]!=null)
                    GetAllDataTable(tempTable[i] , i);//DataTable合并
                }              
            }

            NPOIExcel.TableToExcel(lastTable, folderBrowserDialog1.SelectedPath+"合并.xlsx", sheetCount);//方式2
            dataGridView1.DataSource = lastTable[0];//调试时候显示用的,可以去掉
            dataGridView2.DataSource = lastTable[1];//调试时候显示用的,可以去掉
            dataGridView3.DataSource = lastTable[2];//调试时候显示用的,可以去掉
            sw.Stop();
            label1.Text = sw.ElapsedMilliseconds.ToString("数据导入耗时:" + "0000"+"ms");
            MessageBox.Show("数据导入完成");

npoi.cs

using System;
using System.Collections.Generic;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;

namespace npoi1
{
    public class NPOIExcel
    {
        /// <summary>
        /// 将excel导入到datatable
        /// </summary>
        /// <param name="filePath">excel路径</param>
        /// <param name="isColumnName">第一行是否是列名</param>
        /// <returns>返回datatable</returns>
        public static DataTable ExcelToDataTable(string filePath, bool isColumnName)
        {
            DataTable dataTable = null;
            FileStream fs = null;
            DataColumn column = null;
            DataRow dataRow = null;
            IWorkbook workbook = null;
            ISheet sheet = null;
            IRow row = null;
            ICell cell = null;
            int startRow = 0;
            try
            {
                using (fs = File.OpenRead(filePath))
                {
                    // 2007版本
                    if (filePath.IndexOf(".xlsx") > 0)
                        workbook = new XSSFWorkbook(fs);
                    // 2003版本
                    else if (filePath.IndexOf(".xls") > 0)
                        workbook = new HSSFWorkbook(fs);

                    if (workbook != null)
                    {
                        sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
                        
                        //省略其他代码,太长了
                        
                            return "=" + cell.CellFormula;

            }
        }

    }


}

以上为核心代码,欢迎下载

以上是关于C# Excel数据合并的主要内容,如果未能解决你的问题,请参考以下文章

C#导出涉及行列合并的复杂的Excel数据

使用 C# 读取 Excel 工作表,其中表格已合并单元格

C# DataTable行转列并合并重复列。

ASP.NET C# 如何合并DataTable中的重复数据(做数据整合)

C# 获取Excel中的合并单元格

如何在C#中写Excel文件