使用C#的excel文件列中的最后一行(单元格没有get#u end方法)

使用C#的excel文件列中的最后一行(单元格没有get#u end方法),c#,excel,C#,Excel,当我尝试调用单元格[fullRow,1].get\u end时,我收到一个错误,该对象不包含get\u end的定义,并且找不到扩展方法 我从未见过有人对此抱怨或在旧堆栈溢出线程的评论中描述过这一点。旧堆栈溢出线程的主题是使用C查找excel列中的最后一行# 如果将中的MySheet.Cells[1,1]返回值分配给范围对象或调用函数End,您应该会发现它可以正常工作。 另外,请注意函数的情况,它的意思是:get\u End // Working Excel.Ra

当我尝试调用单元格[fullRow,1].get\u end时,我收到一个错误,该对象不包含get\u end的定义,并且找不到扩展方法

我从未见过有人对此抱怨或在旧堆栈溢出线程的评论中描述过这一点。旧堆栈溢出线程的主题是使用C查找excel列中的最后一行#


如果将中的
MySheet.Cells[1,1]
返回值分配给范围对象或调用函数
End
,您应该会发现它可以正常工作。 另外,请注意函数的情况,它的意思是:
get\u End

        // Working
        Excel.Range firstCell1 = MySheet.Cells[1, 1];
        int LastRow1 = firstCell1.get_End(Excel.XlDirection.xlUp).Row;

        // Working
        Excel.Range firstCell2 = MySheet.Cells[fullRow, 1];
        int LastRow2 = firstCell2.get_End(Excel.XlDirection.xlUp).Row;

        // Working
        int LastRow3 = MySheet.Cells[fullRow, 1].End(Excel.XlDirection.xlUp).Row;

        // Does not work
        int LastRow4 = MySheet.Cells[1, 1].get_End(Excel.XlDirection.xlUp).Row;

我相信问题在于COM互操作在运行时完成的动态绑定,但我不能100%确定原因。

您可以使用类似的方法

void Main()
{

    Microsoft.Office.Interop.Excel.Application app;
    Microsoft.Office.Interop.Excel.Workbook wkb;
    app = new Microsoft.Office.Interop.Excel.Application();
    wkb = app.Workbooks.Open(@"e:\temp\test.xlsx");
    int row = GetLastRow(wkb, "sheet1", "A");
    Console.WriteLine(row);
    app.Quit();
}

int GetLastRow(Workbook wkb, string sheet, string column)
{
    Microsoft.Office.Interop.Excel.Worksheet sht = wkb.Worksheets[sheet] as Worksheet;
    Microsoft.Office.Interop.Excel.Range range = sht.Range[column + ":" + column];
    range = range.Cells[range.Rows.Count, range.Column] as Range;
    return range.End[XlDirection.xlUp].Row;
}

通过添加适当的using指令,您可以删除所有Microsoft.Office.Interop.Excel内容。

我认为没有任何问题。您是否尝试过?更改了示例以将工作簿传递给GetLastRow方法,当然您可以使用传递工作表的相同方式更改方法签名。或者让它保持原样,直呼其名。您将要从
A1
单元格上升到哪里?
void Main()
{

    Microsoft.Office.Interop.Excel.Application app;
    Microsoft.Office.Interop.Excel.Workbook wkb;
    app = new Microsoft.Office.Interop.Excel.Application();
    wkb = app.Workbooks.Open(@"e:\temp\test.xlsx");
    int row = GetLastRow(wkb, "sheet1", "A");
    Console.WriteLine(row);
    app.Quit();
}

int GetLastRow(Workbook wkb, string sheet, string column)
{
    Microsoft.Office.Interop.Excel.Worksheet sht = wkb.Worksheets[sheet] as Worksheet;
    Microsoft.Office.Interop.Excel.Range range = sht.Range[column + ":" + column];
    range = range.Cells[range.Rows.Count, range.Column] as Range;
    return range.End[XlDirection.xlUp].Row;
}