版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
Excel的基本操作步骤:
1、打开Excel:定义了一个Application对象:
Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();
注意:Application对象的Visible属性决定了在运行时是否显示Excel,如果为true,就显示;如果为false则不显示,默认为false。
2、打开工作簿:通常使用Workbooks的Open方法来打开一个现有文档,例如图21--2中打开Northwind.xls:
Workbook Wbook = xls.Workbooks.Open("c:\\lessons\\Northwind.xls");
3、得到所有工作表的集合Worksheets:
Worksheets Wsheets = (Worksheets)Wbook.Worksheets;
4、单个的工作表Worksheet,单个的工作表可以通过两种方式获得,比如得到图21-2中的产品表:
Worksheet Wsheet =Worksheets[序号];,如Worksheets[1]
或者
Worksheet Wsheet =Worksheets[工作表名];,如Worksheets["产品"]
还可以略过Worksheets:
Worksheet Wsheet = Wbook.Worksheets[1];
5、定义并获得一个Worksheet后,就可以操作对应表里面的数据。
Worksheet的Rows属性和Columns属性分别对应了行和列的集合。使用Worksheet.Rows.Count 和 worksheet.Columns.Count 获得工作表的行数和列数,这两个数字对应Excel97-2003版本文件(*.xls文件)分别是 65535 和 256;对于Excel2007及以后版本(*.xlsx文件)是1048576 和16384。要想获得里面的数据,必须对rows和columns进行遍历,但是,这两个数字实在是太大了,通常使用:
Worksheet.UsedRange.Columns.Count 和 Worksheet.UsedRange.Rows.Count
来获得有效使用的行数和列数。
通过 Worksheet.Cells[行号,列号].Value 即可获得对应单元格的值
但是需要注意的是,如果那个单元格为空,会引发错误,可以先做判断值是否为null。
注意:Excel中的索引号是从1开始的。
6、最后,别忘了关闭打开的Excel:
xls.Quit();
【例 21.1】【项目:code21-001】读取Excel工作表数据。
使用到的xls文件是图21-2中的Northwind.xls。
在窗体上放置1个ListView控件,名称为lvExel,它的View属性为Details。
具体代码如下:
//载入数据
private void Button1_Click(object sender, EventArgs e)
{
string filename;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "表格文件|*.xls;*.xlsx";
if(ofd.ShowDialog()!= DialogResult.OK)
{
return;
}
else
{
filename = ofd.FileName;
lvExcel.Items.Clear();
}
Label1.Text = filename;
//定义一个Application
Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();
//打开Excel文档
Workbook Wbook = xls.Workbooks.Open(filename);
//定义Worksheet
Worksheet Wsheet;
//将Worksheet设置为第一个工作表
Wsheet = Wbook.Worksheets[1];
//或者
//Wsheet = Wbook.Worksheets["产品"];
//最大列数
int maxColumn;
//最大行数
int maxRow;
//第一行数据作为列表头
if( Wsheet.Rows.Count > 1)
{
lvExcel.Columns.Clear();
//最大列数设置为有效列数
maxColumn = Wsheet.UsedRange.Columns.Count;
//最大行数设置为有效行数
maxRow = Wsheet.UsedRange.Rows.Count;
//循环获得第一行的单元格内容
for(int i= 1;i<= maxColumn;i++)
{
//设置列表头,需要判断是否是Nothing
if (Wsheet.Cells[1, i].Value == null)
//无数据
lvExcel.Columns.Add("(空)");
else
lvExcel.Columns.Add(Convert.ToString(Wsheet.Cells[1, i].Value));
}
//从第二行开始的行作为数据
for(int j= 2;j<= maxRow;j++)
{
ListViewItem Lv = new ListViewItem();
string LvText;
if (Wsheet.Cells[j, 1].Value==null)
LvText = "(空)";
else
LvText = Convert.ToString(Wsheet.Cells[j, 1].Value);
Lv.Text = LvText;
string subLvText;
for(int k = 2;k<= maxColumn;k++)
{
if (Wsheet.Cells[j, k].Value == null)
subLvText = "(空)";
else
subLvText = Convert.ToString(Wsheet.Cells[j, k].Value);
Lv.SubItems.Add(subLvText);
}
//添加到ListView中
lvExcel.Items.Add(Lv);
}
}
//退出
xls.Quit();
}
运行结果如下图所示:
图21-3 读取到的数据
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录