C#对EXCEL的二次开发中,I列第二行起内容为人的姓名,姓名有重复但无顺序,现按姓名在该表格生成一个子工作薄,并将相同姓名所以的行的内容写入该子工作薄的代码
时间: 2024-11-03 11:13:14 浏览: 28
康耐视visionpro与C#联合二次开发一拖5
5星 · 资源好评率100%
在C#中,使用`Microsoft.Office.Interop.Excel`库进行Excel的二次开发时,你可以通过以下几个步骤来实现这个功能:
1. 引入所需命名空间:
```csharp
using Microsoft.Office.Interop.Excel;
```
2. 创建并打开Excel应用程序和工作簿对象:
```csharp
Application excelApp = new Application();
Workbook workbook = excelApp.Workbooks.Open("原工作簿路径");
```
3. 获取数据区域,并确定起始位置(这里假设从第2行开始):
```csharp
Range dataRange = workbook.Sheets[1].Range["I2", "I" & workbook.Sheets[1].UsedRange.Rows.Count];
List<string> names = dataRange.Value.ToList();
```
4. 遍历名称列表,创建子工作簿并追加新工作表:
```csharp
foreach (string name in names.Distinct()) {
Workbook subWorkbook = workbook.Add();
Worksheet subSheet = subWorkbook.ActiveSheet;
// 检查是否已存在同名的工作表
if (!subSheet.Name.Contains(name)) {
subSheet.Name = name;
// 将相同姓名的行复制到子工作簿
Range nameRows = workbook.Sheets[1].GetRows(dataRange.Find(name, false).Row);
nameRows.Copy(subSheet.Cells[1, 1]);
}
}
```
5. 保存子工作簿并关闭操作:
```csharp
foreach (Workbook subWorkbook in excelApp.Workbooks) {
subWorkbook.SaveAs($"'{name}.xls'"); // 或者xlsx格式
subWorkbook.Close(false); // 不保存更改
}
excelApp.Quit(); // 关闭所有打开的应用
```
阅读全文