当前位置:首页>>开发编程>>VS.NET>>新闻内容
C# 操作 Excel
作者:Young 发布时间:2004-8-11 13:17:35 文章来源:cnblogs

首先将excel.exe copy 到 ..\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin目录下
利用.net 中带的工具在命令提示符下执行tlbimp excel.exe.这样就不会因为你的Excel是xp或2000的不同要去找不同的*.olb文件,还有一点就是因为在2000以后的版本中没有了excel9.olb这个文件了。

通过执行tlbimp excel.exe后我们会得到excel.dll文件。

只要有了这个Excel.dll,现在我们就能使用Excel的各种操作函数了。
下面就让我们具体看看C#是如何使用这些东东吧。
1. 创建一个新Excel的Application:

Application exc = new Application();
if (exc == null) {
Console.WriteLine("ERROR: EXCEL couldn't be started");
return 0;
}

2. 让这个工程可见:
exc.set_Visible(0, true);
3. 获取WorkBooks集合:
Workbooks workbooks = exc.Workbooks;
4. 加入新的WorkBook:
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);
5. 获取WorkSheets集合:

_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
if (worksheet == null) {
Console.WriteLine ("ERROR in worksheet == null");
}
6. 给单元格设置变量:

 

Range range1 = worksheet.get_Range("C1",Missing.Value);
if (range1 == null
{
Console.WriteLine (
"ERROR: range == null");
}

const int nCells = 1;
Object[] args1 
= new Object[1];
args1[
0= nCells;
range1.GetType().InvokeMember(
"Value",BindingFlags.SetProperty, null, range1, args1);

 

例程:

 

using System;
using System.Reflection; 
using System.Runtime.InteropServices; 
using Excel;
class Excel {
public static int Main() {
Application exc 
= new Application();
if (exc == null{
Console.WriteLine(
"ERROR: EXCEL couldn't be started!");
return 0;
}

exc.set_Visible(
0true); 
Workbooks workbooks 
= exc.Workbooks;
_Workbook workbook 
= workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0); 
Sheets sheets 
= workbook.Worksheets;
_Worksheet worksheet 
= (_Worksheet) sheets.get_Item(1);
if (worksheet == null{
Console.WriteLine (
"ERROR: worksheet == null");
}

Range range1 
= worksheet.get_Range("C1", Missing.Value);
if (range1 == null{
Console.WriteLine (
"ERROR: range == null");
}

const int nCells = 1;
Object[] args1 
= new Object[1];
args1[
0= nCells;
range1.GetType().InvokeMember(
"Value", BindingFlags.SetProperty, null,range1, args1);
return 100;
}

}


现在我们来看看如何使用数组,他有些类似于设置单元格。仅仅需要的改变只是args2[0] = array2;

const int nCell = 5;
Range range2 
= worksheet.get_Range("A1""E1");
int[] array2 = new int [nCell];
for (int i=0; i < array2.GetLength(0); i++
{
array2[i] 
= i+1;
}

Object[] args2 
= new Object[1];
args2[
0= array2;
range2.GetType().InvokeMember(
"Value", BindingFlags.SetProperty, null, range2, args2);


  大家需要了解Tlbimp这个工具的使用啊:)这个东东很有用,可以将普通Win32程序移植到.Net下面来:)
如果操作的excel的格式很简单,就是一般的表的结构,那么其实操作EXCEL文件跟操作ACCESS数据库文件的方法几乎一样。
需要注意的地方就是,1、程序会把EXCLE表中的第一行记录作为列名;2、在使用EXCLE表的时候, 要在表名后面加上符号$

下面,我给你帖一段如何连接和读取EXCEL文件的代码吧:


 

DataSet ds = new DataSet();
OleDbDataAdapter ad;


string strDbPath = "./code.xls";
string strConn = "Provider=Microsoft.Jet.OleDb.4.0; Data Source="+Server.MapPath(strDbPath)+"; Extended Properties=Excel 8.0;";

OleDbConnection Conn 
= new OleDbConnection(strConn);

Conn.Open();

string strSQL = "select * from [股票代码$]";


ad 
= new OleDbDataAdapter(strSQL, Conn);
ad.Fill(ds);

dg1.DataSource 
= ds.Tables[0].DefaultView;  //dg1是一个DataGrid控件
dg1.DataBind();  //将EXCLE中股票代码中的记录棒定到DataGrid控件上



如果是在asp.net 下使用的话,要记得在  中添加
否则就会出现 “异常详细信息: System.UnauthorizedAccessException: 拒绝访问“。


最新更新
·C#中使用Split分隔字符串的技
·VS2008开发中Windows Mobile
·PC机和移动设备上绝对路径的
·C#程序加壳的方法(使用Sixx
·当前上下文中不存在名称Conf
·请插入磁盘:Visual Studio 2
·用VS.NET读取Flash格式文件信
·在ASP.NET中使用AJAX的简单方
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻
相关信息
·C#中使用Split分隔字符串的技巧
·PC机和移动设备上绝对路径的获取(C#)
·C#程序加壳的方法(使用Sixxpack)
·当前上下文中不存在名称ConfigurationManager的解决方法
·C#的支付宝Payto接口代码
·C#实现窗口最小化到系统托盘
·解密QQ的MsgEx.db消息文件格式
·QQ的TEA填充算法C#实现
·C#用Guid获取不规则的唯一值(标识)
·基于Windows Mobile 5.0的掌上天气预报设计
画心
愚爱
偏爱
火苗
白狐
画沙
犯错
歌曲
传奇
稻香
小酒窝
狮子座
小情歌
全是爱
棉花糖
海豚音
我相信
甩葱歌
这叫爱
shero
走天涯
琉璃月
Nobody
我爱他
套马杆
爱是你我
最后一次
少女时代
灰色头像
断桥残雪
美了美了
狼的诱惑
我很快乐
星月神话
心痛2009
爱丫爱丫
半城烟沙
旗开得胜
郎的诱惑
爱情买卖
2010等你来
我叫小沈阳
i miss you
姑娘我爱你
我们都一样
其实很寂寞
我爱雨夜花
变心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK绷
贝多芬的悲伤
哥只是个传说
丢了幸福的猪
找个人来爱我
要嫁就嫁灰太狼
如果这就是爱情
我们没有在一起
寂寞在唱什么歌
斯琴高丽的伤心
别在我离开之前离开
不是因为寂寞才想你
爱上你等于爱上了错
在心里从此永远有个你
一个人的寂寞两个人的错