如何在c#中将两个Excel工作簿合并为一个工作簿

本文关键字:工作簿 合并 一个 Excel 两个 | 更新日期: 2023-09-27 18:08:08

假设我在本地有两个Excel文件(工作簿)。每个Excel工作簿都有3个工作表。

假设WorkBook1有Sheet1, Sheet2, Sheet3

Workbook2有Sheet1, Sheet2, Sheet3。

所以这里我需要合并这两个excel工作簿和新的excel工作簿,我们说Workbook3,它将有总共6个工作表(workbook1和workbook2的组合)。

我需要代码,如何在c#中执行此操作,而不使用任何第三方工具。如果第三方工具是免费版本,那么它很好。

如何在c#中将两个Excel工作簿合并为一个工作簿

一个更简单的解决方案是复制工作表本身,而不是它们的单元格。

这个方法获取任意数量的excel文件路径,并将它们复制到一个新文件中:

private static void MergeWorkbooks(string destinationFilePath, params string[] sourceFilePaths)
{
  var app = new Application();
  app.DisplayAlerts = false; // No prompt when overriding
  // Create a new workbook (index=1) and open source workbooks (index=2,3,...)
  Workbook destinationWb = app.Workbooks.Add();
  foreach (var sourceFilePath in sourceFilePaths)
  {
    app.Workbooks.Add(sourceFilePath);
  }
  // Copy all worksheets
  Worksheet after = destinationWb.Worksheets[1];
  for (int wbIndex = app.Workbooks.Count; wbIndex >= 2; wbIndex--)
  {
    Workbook wb = app.Workbooks[wbIndex];
    for (int wsIndex = wb.Worksheets.Count; wsIndex >= 1; wsIndex--)
    {
      Worksheet ws = wb.Worksheets[wsIndex];
      ws.Copy(After: after);
    }
  }
  // Close source documents before saving destination. Otherwise, save will fail
  for (int wbIndex = 2; wbIndex <= app.Workbooks.Count; wbIndex++)
  {
    Workbook wb = app.Workbooks[wbIndex];
    wb.Close();
  }
  // Delete default worksheet
  after.Delete();
  // Save new workbook
  destinationWb.SaveAs(destinationFilePath);
  destinationWb.Close();
  app.Quit();
}

编辑:注意,你可能想要Move方法而不是Copy,如果你有表之间的依赖关系,例如透视表,图表,公式等。否则,数据源将断开连接,并且一个工作表中的任何更改都不会影响另一个工作表。

这是一个将两本书合二为一的工作示例,希望它能给你一些启发:

using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection; 

namespace MergeWorkBooks
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application app = new Excel.Application();
            app.Visible = true;
            app.Workbooks.Add("");
            app.Workbooks.Add(@"c:'MyWork'WorkBook1.xls");
            app.Workbooks.Add(@"c:'MyWork'WorkBook2.xls");

            for (int i = 2; i <= app.Workbooks.Count; i++)
            {
                int count = app.Workbooks[i].Worksheets.Count;
                app.Workbooks[i].Activate();
                for (int j=1; j <= count; j++)
                {
                    Excel._Worksheet ws = (Excel._Worksheet)app.Workbooks[i].Worksheets[j];
                    ws.Select(Type.Missing);
                    ws.Cells.Select();
                    Excel.Range sel = (Excel.Range)app.Selection;
                    sel.Copy(Type.Missing);
                    Excel._Worksheet sheet = (Excel._Worksheet)app.Workbooks[1].Worksheets.Add(
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing
                        );
                    sheet.Paste(Type.Missing, Type.Missing);
                }

            }
        }
    }
}

您正在寻找c#中的Office自动化库。
下面是一个示例代码,以帮助您开始。

 System.Data.Odbc.OdbcDataAdapter Odbcda;
//CSV File
strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + SourceLocation + ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
sqlSelect = "select * from [" + filename + "]";
System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(strConnString.Trim());
conn.Open();
Odbcda = new System.Data.Odbc.OdbcDataAdapter(sqlSelect, conn);
Odbcda.Fill(ds, DataTable);
conn.Close();
  • 这将读取excel文件的内容到数据集。
  • 像这样创建多个数据集,然后进行合并。

直接取自此处的代码