如何用C#将多个Excel工作簿的工作表合并到新工作簿?
用C#将多个Excel工作表合并到新工作簿
你可以通过Worksheet.Copy()方法将现有工作表复制到新创建的工作簿中,以下是完整实现方案:
完整代码示例
var App = new Microsoft.Office.Interop.Excel.Application(); // 打开源工作簿并获取目标工作表 Workbook book1 = App.Workbooks.Open(@"C:\path\to\book1.xlsx"); Worksheet sheet1 = book1.Worksheets[1]; Workbook book2 = App.Workbooks.Open(@"C:\path\to\book2.xlsx"); Worksheet sheet2 = book2.Worksheets[1]; Workbook book3 = App.Workbooks.Open(@"C:\path\to\book3.xlsx"); Worksheet sheet3 = book3.Worksheets[1]; // 创建新工作簿 Workbook newWorkbook = App.Workbooks.Add(); // 将工作表复制到新工作簿:指定After参数,把源表放到新工作簿最后一个工作表之后 sheet1.Copy(After: newWorkbook.Worksheets[newWorkbook.Worksheets.Count]); sheet2.Copy(After: newWorkbook.Worksheets[newWorkbook.Worksheets.Count]); sheet3.Copy(After: newWorkbook.Worksheets[newWorkbook.Worksheets.Count]); // 删除新工作簿默认生成的空白工作表(按需选择) if (newWorkbook.Worksheets.Count > 3) { newWorkbook.Worksheets[1].Delete(); } // 保存合并后的工作簿 newWorkbook.SaveAs(@"C:\path\to\merged_workbook.xlsx"); // 关闭所有工作簿并释放资源 book1.Close(SaveChanges: false); book2.Close(SaveChanges: false); book3.Close(SaveChanges: false); newWorkbook.Close(SaveChanges: false); App.Quit(); // 手动释放COM对象,避免Excel进程后台残留 System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet1); System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet2); System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet3); System.Runtime.InteropServices.Marshal.ReleaseComObject(book1); System.Runtime.InteropServices.Marshal.ReleaseComObject(book2); System.Runtime.InteropServices.Marshal.ReleaseComObject(book3); System.Runtime.InteropServices.Marshal.ReleaseComObject(newWorkbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(App);
关键细节说明
Worksheet.Copy():如果不指定Before/After参数,会自动生成新工作簿存放复制的表;这里通过After参数明确指定到我们创建的新工作簿中。- 默认工作表处理:新工作簿默认会包含1个空白工作表(数量取决于Excel设置),合并完成后可按需删除。
- 资源清理:必须手动释放COM对象并退出Excel应用,否则会导致后台残留Excel进程。
内容的提问来源于stack exchange,提问作者Nilesh Patil
相关产品推荐
相关产品推荐

