我在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开始的数据的所有行。
我将如何实现这一目标?
答案 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;