[英]how to copy cells from a specific range from one excel workbook to another workbook using c#
[英]How to merge two Excel workbook into one workbook in C#?
让我们考虑一下我在本地有两个 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
。否则数据源将断开连接,并且一张工作表中的任何更改都不会影响另一张工作表.
通常,有两种方法可以使用C#自动执行Excel任务。
当Microsoft提供自己的库时,为什么还要去第三方库? 我很高兴你问。
这就是为什么有大量第三方库可用的原因。 付费和开源。 我通常不喜欢花钱买东西,并且发现开源,免费的ExcelMapper (对于非常简单的场景)和EPPlus库非常有用。
如何使用EPPlus合并两个Excel工作簿这里是代码:
var file1 = new FileInfo(@"C:\Temp\Sample\Book 1.xlsx");
var file2 = new FileInfo(@"C:\Temp\Sample\Book 2.xlsx");
var mergedFileName = new FileInfo(@"C:\Temp\Sample\Merged.xlsx");
//lets open the file
using (var firstFile = new ExcelPackage(file1))
{
using (var secondFile = new ExcelPackage(file2))
{
foreach (var ws in secondFile.Workbook.Worksheets)
{
string worksheetName = ws.Name;
// if worksheet name already exists - change name
if (firstFile.Workbook.Worksheets.Any(ar => ar.Name == ws.Name))
worksheetName = string.Format("{0} - {1}", worksheetName, "Copy");
firstFile.Workbook.Worksheets.Add(worksheetName, ws);
}
}
firstFile.SaveAs(mergedFileName);
}
这是运行代码时的样子: (来源: excel-automation-guide.com )
您正在寻找 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();
代码直接取自这里。
这是一个将两本书合并成一本新书的工作示例,希望它能给你一个想法:
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);
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.