我需要帮助将某些数据从一个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");
}
}
此当前代码将仅复制整个电子表格并将其粘贴到新工作簿中。我只想要相关数据。
答案 0 :(得分:0)
互操作代码有点难以理解和使用。我建议您使用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上检查其他问题。 Example
您也可以使用ClosedXML。使用Excel非常容易。