![](/img/trans.png)
[英]C# - How to copy a single Excel worksheet from one workbook to another?
[英]how to copy cells from a specific range from one excel workbook to another workbook using c#
我需要帮助将某些数据从一个Excel工作簿中的单元格复制到另一个Excel工作簿中。 我在指定c#代码以查找不是第一列的指定列中的数据时遇到麻烦。 excel工作表包含有关员工详细信息的数据,例如姓名,电话号码,部门和电子邮件。 我希望代码搜索列并查找与某个位置匹配的数据,例如,受训者而不是永久雇员。 该代码应能够复制受训人员并粘贴到另一个指定的工作簿中。
我尝试实现一个if语句,如果该单元格包含字符串'trainee',它将把数据粘贴到另一个工作簿中,只有当该列是第一列时才成功,而在实际电子表格中则不是。 我在互联网上进行了搜索,但是找不到关于如何在控制台应用程序中使用c#操纵excel的结论性教程。
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
static void Main(string[] args)
{
var excelapp = new Excel.Application();
excelapp.Workbooks.Add();
string path =
@"C:\Users\....xlsx";
Excel.Workbook workbook = excelapp.Workbooks.Open(path);
Excel.Worksheet workSheet = workbook.Worksheets.get_Item(1);
var source =
workSheet.Range["h3:H10"].Insert(Excel.XlInsertShiftDirection.xlShiftDown);
Excel.Range dest = workSheet.Range["F10"];
workbook.SaveAs("Book1.xlsx");
}
}
当前代码仅复制整个电子表格并将其粘贴到新工作簿中。 我只想要相关数据。
互操作代码有点难以理解和使用。 我建议您使用OleDb或一些OpenXML替代方法来处理Excel文件。
据我所知,您的问题是表格在excel中看起来像这样,您想将具有“ Trainee”作为“职位”的行复制到新的WorkSheet中。
| Name | Number | Department | Email | Position |
|------|--------|-------------|---------|-----------|
| A | 1 | DepartmentA | A@a.com | Permanent |
| B | 2 | DepartmentB | B@b.com | Trainee |
| C | 3 | DepartmentB | C@c.com | Trainee |
使用OleDB获取Excel数据:
var conStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};Extended Properties='Excel 12.0;HDR={1};IMEX=1'";
var pathToExcel = @"C:\Users\....xlsx";;
var udt = new DataTable();
conStr = string.Format(conStr, pathToExcel, "Yes");
using (var connExcel = new OleDbConnection(conStr))
{
var cmdExcel = new OleDbCommand();
var oda = new OleDbDataAdapter();
connExcel.Open();
var dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dtExcelSchema != null)
{
//Get the name of First Sheet
var sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
cmdExcel.Connection = connExcel;
cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";
}
oda.SelectCommand = cmdExcel;
oda.Fill(udt);
}
我们将从Excel获取的数据放入数据表中。 然后,您可以编写一个简单的查询来获取所需的任何数据,
//Getting array of DataRow with required data
var rows = udt.Select("[Position]='Trainee');
if (rows.Length > 0)
DataTable finalDataTable = rows.CopyToDataTable();
然后,您可以根据需要将DataTable转换为另一个WorkSheet或Excel工作表。 有很多方法可以做到这一点,您可以在SO上检查其他问题。 例
您也可以使用ClosedXML 。 使用Excel非常容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.