如何在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#中执行此操作,而不使用任何第三方工具。如果第三方工具是免费版本,那么它很好。
一个更简单的解决方案是复制工作表本身,而不是它们的单元格。
这个方法获取任意数量的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文件的内容到数据集。
- 像这样创建多个数据集,然后进行合并。
直接取自此处的代码