如何从C#中获取Excel中特定列中包含数据的所有行

时间:2014-09-11 09:26:15

标签: c# excel vsto

我在Excel中有一个数据集,并使用C#打开工作表并访问一些数据。

我正在尝试获取包含特定列数据的所有行。例如,在列B中,从单元格'B3'开始,我希望将包含数据的所有行存储在集合中,如数组。

这是我到目前为止所做的:

Application excelApplication;
_Workbook workbook;
_Worksheet sheet;

excelApplication = new Excel.Application
  {
    Visible = true,
    ScreenUpdating = true
  };

workbook = excelApplication.Workbooks.Open(@"C:\Documents and Settings\user\Desktop\Book1.xls");
sheet = (Worksheet)workbook.Worksheets[2];

Excel.Range range = sheet.Range["b3:b145"].

foreach (Range cell in range)
   {

      // Do something with rows which contain data          
   }

如上所示,我已经指定了B3到B45的范围,我不想要。我想获取B列中包含从B3开始的数据的所有行。

我将如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

通常,当我遇到这些情况时,我会记录一个宏并将VBA代码转换为C#。 VSTO中的对象模型几乎完全相同(请记住这是一个很棒的提示),并且使用.Net 4.0以及可选参数可以节省大量代码。

在您的特定实例中,我设想电子表格越大,使用VSTO读取B列中的所有Excel单元格所需的时间越长。我的建议是使用这种技术一次性读取它们:

//Work out the number of rows with data in column B:
//int lastColumn = range.Columns.Count;
int lastRow = range.Rows.Count;

//Get all the column values:
object[,] objectArray = shtName.get_Range("B3:B" + lastRow.ToString()).Value2;
rngName.Value2 = objectArray;