如何让Excel插件读取工作表中的行,直到没有更多的数据?

我已经开始使用C#编写Excel 2003的COM插件。 我正在寻找一个代码示例,展示如何从活动工作表读入单元格数据。 我已经看到,你可以写这样的代码:

Excel.Range firstCell = ws.get_Range("A1", Type.Missing); Excel.Range lastCell = ws.get_Range("A10", Type.Missing); Excel.Range worksheetCells = ws.get_Range(firstCell, lastCell); 

抓住一系列的细胞。 我可以使用的帮助是如何读取单元格数据,当你不知道有多less行数据。 我可能能够确定数据将从哪里开始,但是将会有未知数量的数据行要读取。

有人能给我提供一个如何从工作表读取行的例子,直到遇到一排空单元格为止?

也没有人知道如何抓住用户select的单元格的范围?

任何帮助将不胜感激。 这似乎是一个强大的开发工具,但我很难find详细的文档,以帮助我学习它:)

我可以想到2种方法。 第一个select是使用命名范围,而不是单元格的位置。 在这种情况下,您可以例如命名A1:A10“MyList”,并使用内容读取到数组中

 Excel.Range range = worksheet.get_Range("MyList", Type.Missing); object[,] data = (object[,])range.Value2; 

好处是,如果您调整命名的范围(通过在工作表中插入行或列),这仍然可以正常工作。
你也可以阅读,直到你遇到一个空或空单元格,但你将不得不阅读逐个单元格。 如果你的细胞数量很less,这不是问题,但是如果你处理的是大量的数据(比如说100个细胞),逐个细胞的阅读会让你的速度变慢。 我没有试过这段代码,但沿着这些行的东西应该从startRow开始,直到find一个空行:

  int startRow = 1; bool hasContent = false; int row = startRow; do { var cell = (Excel.Range)sheet.Cells[row,1]; if (cell.Value2 != null) { hasContent = true; row++; } } while (hasContent); 

使用这个代码,它应该find最后一行,并在它的第一列将会“结束”。

var lastExcel = worksheet.Rows.get_End(XlDirection.xlDown); lastExcel.Cells[worksheet.Rows.get_End(XlDirection.xlUp).Row + 1, 1].Value2 = "End";