繁体   English   中英

如何使用C#将一个Excel工作簿中特定范围的单元格复制到另一工作簿中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM