VSTO学习(二)——Excel对象模型
要开发Excel的项目,就自然少不了对Excel对象模型的了解了,只有了解Excel对象模型,这样才能更好地对Excel进行处理。下面先给出一张Excel对象模型的图:
下面就具体对上图中的各个对象做一个简单的介绍:
Application对象——Excel中的Application对象表示Excel应用程序,该对象是所有Excel对象的根,你可以通过Application对象,获取到其他对象,在外接程序中,我们可以通过下面的方式来获得Application对象:Globals.ThisAddIn.Application
Workbooks对象代表Workbook对象的集合,而Workbook对象表示Excel中的单个工作簿,我们可以通过下面的方式来获得工作簿对象:Globals.ThisAddIn.Application.ThisWorkbook
Worksheets对象代表Worksheet对象的集合,而Worksheet代表的就是Excel中的表,下面的代码可以获得Worksheet对象:Globals.ThisAddIn.Application.ThisWorkbook.ActiveSheet (激活的表,每次打开一个Excel文件,都是表一即sheet1被激活,所以通过该代码就说获得表一对象)
Range对象代表一个范围,是操作Excel文档最常用的对象,它可以表示为一个单元格、一行、一列或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格。可能上面的解释过于枯燥,相信大家通过下图可以更好地理解Excel中的各个对象:
现在我们来模拟一个需求,比如现在有一个成绩单工作表,我们希望获得各科目不及格同学的名字。此时我们只需要在上面创建的工作簿项目中添加一个ComboBox,一个Button,一个textbox。在button的Click事件中添加下面的代码:
代码:
// 找出各科目不及格同学的名字 private void btnSearch_Click(object sender, EventArgs e) { // 清除textbox中的内容 txtResult.Clear(); // 从复选框中获得选择的科目索引 int subjectIndex = cbxsubjects.SelectedIndex; if (subjectIndex == -1) { MessageBox.Show("请先选择一个科目"); return; } // 获得选择的科目名称 string subjectName = cbxsubjects.SelectedItem.ToString(); // 获得工作表对象 Excel.Worksheet worksheet =(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet; for (int row = 2; row < worksheet.UsedRange.Rows.Count+1; row++) { Excel.Range rng =(Excel.Range)worksheet.Cells[row,subjectIndex + 2]; Excel.Range rng1 = (Excel.Range)worksheet.Cells[row, 1]; if (rng.Value< 60) { txtResult.Text += rng1.Value + "; "; } } if (txtResult.Text.Length == 0) { txtResult.Text = subjectName + "没有不及格的同学"; } }