C#对EXCEL的二次开发中,从第二行开始依次读取J列的值,按J列值不同的新建一张表格,相同的值依次复制进新建的表格中的J列的代码
时间: 2024-11-05 20:25:35 浏览: 12
康耐视visionpro与C#联合二次开发一拖5
5星 · 资源好评率100%
在C#中,使用`Microsoft.Office.Interop.Excel`命名空间进行Excel操作,你可以使用以下代码片段来实现这个需求。这里假设你已经引用了Excel interop库:
```csharp
using Microsoft.Office.Interop.Excel;
// 创建一个新的Excel应用实例
Application excelApp = new Application();
// 打开你的工作簿
Workbook workbook = excelApp.Workbooks.Open("YourWorkbook.xlsx");
// 获取当前活动的工作表
Worksheet worksheet = workbook.ActiveSheet;
// 定义一个List用于存储新的工作表和它们的J列数据
List<Worksheet> sheetsAndData = new List<Worksheet>();
// 遍历从第二行开始的所有单元格
for (int i = 1; i <= worksheet.Cells.SpecialCells(xlCellTypeLastCell).Row; i++)
{
string value = worksheet.Cells[i, "J"].Value.ToString(); // 读取J列的值
// 检查新值是否已存在于列表中
bool isNew = !sheetsAndData.Any(s => s.Cells[1, "J"].Value == value);
// 如果是新值,创建新工作表并添加到列表中
if (isNew)
{
Workbook newWorkbook = excelApp.Workbooks.Add();
Worksheet newDataSheet = newWorkbook.Sheets.Add(After:=newWorkbook.Sheets[newWorkbook.Sheets.Count]);
sheetsAndData.Add(newDataSheet);
// 将新值复制到新工作表的J列第一行
newDataSheet.Cells[1, "J"] = value;
}
// 如果已有对应值,将数据复制到该工作表的J列相应位置
else
{
int index = sheetsAndData.FindIndex(s => s.Cells[1, "J"].Value == value);
sheetsAndData[index].Cells[i - 1, "J"] = value;
}
}
// 关闭所有打开的工作簿,但保留最后创建的新工作簿
foreach (var sheet in sheetsAndData.TakeWhile(sheet => sheet.Parent != workbook))
{
sheet.Workbook.Close(false);
}
workbook.Close();
阅读全文