如何使用interop(c#.Net)迭代excel(.xlsm)工作表的行和列

如何使用interop(c#.Net)迭代excel(.xlsm)工作表的行和列,c#,excel,C#,Excel,我有5列(姓名、部门、销售详情、表格(.xlsm)中的地址)我必须使用类object using for loop填充此工作表,并在填充此工作表后填充工作表,相同的对象数据填充工作表需要的某些信息2.我不熟悉excel工作表操作和互操作,是否有人可以让我知道如何填充此数据以及如何以编程方式切换到下一个工作表以填充工作表中的剩余数据二, for(int masterValues = 0; masterValues < frequencyValues.Count(); masterValues

我有5列(姓名、部门、销售详情、表格(.xlsm)中的地址)我必须使用类object using for loop填充此工作表,并在填充此工作表后填充工作表,相同的对象数据填充工作表需要的某些信息2.我不熟悉excel工作表操作和互操作,是否有人可以让我知道如何填充此数据以及如何以编程方式切换到下一个工作表以填充工作表中的剩余数据二,

for(int masterValues = 0; masterValues < frequencyValues.Count(); masterValues++)
{ MasterDataHeader name= new MasterDataHeader();
 masterDataHeader.department = Kvp[0].ToString();
 masterDataHeader.salesdetails= Kvp[1].ToString();
 masterDataHeader.adress = Kvp[2].ToString();
 masterDataHeader.Gebaude_art = Kvp[3].ToString();
 masterdtaheader.frequencyinfo=kvp[4]//need to update sheet2
 }
for(int masterValues=0;masterValues
  • 您的计算机或执行此代码的服务器上必须安装Microsoft Office Excel 2007或更高版本

  • 添加对程序集->扩展->Microsoft.Office.Interop.Excel的引用

  • 如果未看到部件,请参见


下面是如何添加新工作簿、添加两个新工作表、向这些工作表添加数据、保存工作簿和退出excel的简单示例

有关更多信息,请查看,例如


获取表2中的最后一行并在其下方插入新行。表2为空时,最后一行保持32。表2为空时,新行不会增加

  • 您的计算机或执行此代码的服务器上必须安装Microsoft Office Excel 2007或更高版本

  • 添加对程序集->扩展->Microsoft.Office.Interop.Excel的引用

  • 如果未看到部件,请参见


下面是如何添加新工作簿、添加两个新工作表、向这些工作表添加数据、保存工作簿和退出excel的简单示例

有关更多信息,请查看,例如


获取表2中的最后一行并在其下方插入新行。表2为空时,最后一行保持32。表2为空时,新行不会增加


嗨,Daniel,我还有一个要求我在一张Excel工作表中创建了三个表,第二个表我已经填充了数据现在我想随着数据大小的增加动态添加行。有没有根据单元格中的内容标识单元格索引。例如,在我的表列名中,是放在[]中的员工编号20,2]我可以使用interop动态获取此索引。希望您理解我的要求。请查看编辑答案的第二部分。嗨,Daniel,谢谢您在这方面的帮助。但我正在研究如何在第二个表中动态创建新行假设工作表有3个表,我想在第二个表中插入一个新行此表h已经有几行了,我的意思是,若表中包含三行数据,我会在第二个表中找到空(第四)行,需要插入数据。第二个表从(45,8)开始希望你现在清楚我的要求。如果你只想得到下一个临时行的索引,在那里插入数据,最好是在你的c代码中为每个表维护一个
最后一行指针,然后在插入的每一行中增加这个指针。你能发布示例代码如何维护la吗st行指针,因为我是这类操作的新手。我关心的是表2开始索引(32,2)将出现名称coulmn等..对于这个表,我只需要找出最后一个插入记录,当我试图获取最后一行时,它将位于3个表的底部。请帮助我这是非常迫切的我Daniel,我还有一个要求我在一个Excel表中创建了三个表,第二个表我已经填充了数据现在我想动态添加行作为dat大小增加。根据单元格中的内容来标识单元格索引。例如,在我的表列名中,是放在[]中的员工编号20,2]我可以使用interop动态获取此索引。希望您理解我的要求。请查看编辑答案的第二部分。嗨,Daniel,谢谢您在这方面的帮助。但我正在研究如何在第二个表中动态创建新行假设工作表有3个表,我想在第二个表中插入一个新行此表h已经有几行了,我的意思是,若表中包含三行数据,我会在第二个表中找到空(第四)行,需要插入数据。第二个表从(45,8)开始希望你现在清楚我的要求。如果你只想得到下一个临时行的索引,在那里插入数据,最好是在你的c代码中为每个表维护一个
最后一行指针,然后在插入的每一行中增加这个指针。你能发布示例代码如何维护la吗st行指针,因为我是这类操作的新手。我关心的是表2开始索引(32,2)将出现名称coulmn等等。对于这个表,我只需要找出最后一条插入记录,当我试图获取最后一行时,它将出现在表3的底部。请帮助我,这是非常紧急的
using MSExcel = Microsoft.Office.Interop.Excel;

public static void FillExcel(IEnumerable<MasterDataHeader> data)
{
    MSExcel.Application excel = new MSExcel.Application { Visible = true };
    MSExcel.Workbook workbook = excel.Workbooks.Add();
    MSExcel.Worksheet sheet1 = workbook.Worksheets.Add();
    MSExcel.Worksheet sheet2 = workbook.Worksheets.Add();
    MasterDataHeader[] masterDataHeaders = data as MasterDataHeader[] ?? data.ToArray();

    int row = 0;
    foreach (var item in masterDataHeaders)
    {
        row++;
        sheet1.Cells[row, 1] = item.Name;
        sheet1.Cells[row, 2] = item.Department;
        sheet1.Cells[row, 3] = item.SalesDetails;
        sheet1.Cells[row, 4] = item.Adress;
    }

    row = 0;
    foreach (var item in masterDataHeaders)
    {
        row++;
        sheet2.Cells[row, 1] = item.GebaudeArt;
        sheet2.Cells[row, 2] = item.Frequencyinfo;
    }

    workbook.Save();
    excel.Quit();
}  
object missing = System.Type.Missing;
const int employeeNumber = 16845374;
MSExcel.Range employeeNumberFound = null;

employeeNumberFound = sheet1.UsedRange.Find(employeeNumber, missing,
    MSExcel.XlFindLookIn.xlValues, MSExcel.XlLookAt.xlPart,
    MSExcel.XlSearchOrder.xlByRows, MSExcel.XlSearchDirection.xlNext, false,
    missing, missing);

if (employeeNumberFound != null)
{
    Debug.WriteLine($"Employee number '{employeeNumber}' was found in cell '[{employeeNumberFound.Row},{employeeNumberFound.Column}]'");
}
else
{
    Debug.WriteLine($"Employee number '{employeeNumber}' was not found");
}
var lastRowAsRange = sheet1.Cells[32, 2].CurrentRegion.Columns[1].Cells.Find("*", missing, missing, missing, 
    XlSearchOrder.xlByRows, XlSearchDirection.xlPrevious, false, missing, missing);

var lastRow = lastRowAsRange != null
    ? lastRowAsRange.Row
    : 32;

var newRow = lastRowAsRange != null
    ? lastRow + 1
    : lastRow;

bool inserted = sheet1.Rows[newRow].Insert(XlDirection.xlDown, XlInsertFormatOrigin.xlFormatFromLeftOrAbove);

if (inserted)
{
    sheet1.Cells[newRow, 1] = "IT";
    sheet1.Cells[newRow, 2] = "100";
    sheet1.Cells[newRow, 3] = "hyd";
}