當(dāng)前位置:首頁>>開發(fā)編程>>VS.NET>>新聞內(nèi)容
C# 操作 Excel
作者:Young 發(fā)布時(shí)間:2004-8-11 13:17:35 文章來源:cnblogs

首先將excel.exe copy 到 ..\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin目錄下
利用.net 中帶的工具在命令提示符下執(zhí)行tlbimp excel.exe.這樣就不會(huì)因?yàn)槟愕腅xcel是xp或2000的不同要去找不同的*.olb文件,還有一點(diǎn)就是因?yàn)樵?000以后的版本中沒有了excel9.olb這個(gè)文件了。

通過執(zhí)行tlbimp excel.exe后我們會(huì)得到excel.dll文件。

只要有了這個(gè)Excel.dll,現(xiàn)在我們就能使用Excel的各種操作函數(shù)了。
下面就讓我們具體看看C#是如何使用這些東東吧。
1. 創(chuàng)建一個(gè)新Excel的Application:

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

2. 讓這個(gè)工程可見:
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. 給單元格設(shè)置變量:

 

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;
}

}


現(xiàn)在我們來看看如何使用數(shù)組,他有些類似于設(shè)置單元格。僅僅需要的改變只是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這個(gè)工具的使用。海┻@個(gè)東東很有用,可以將普通Win32程序移植到.Net下面來:)
如果操作的excel的格式很簡(jiǎn)單,就是一般的表的結(jié)構(gòu),那么其實(shí)操作EXCEL文件跟操作ACCESS數(shù)據(jù)庫(kù)文件的方法幾乎一樣。
需要注意的地方就是,1、程序會(huì)把EXCLE表中的第一行記錄作為列名;2、在使用EXCLE表的時(shí)候, 要在表名后面加上符號(hào)$

下面,我給你帖一段如何連接和讀取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是一個(gè)DataGrid控件
dg1.DataBind();  //將EXCLE中股票代碼中的記錄棒定到DataGrid控件上



如果是在asp.net 下使用的話,要記得在  中添加
否則就會(huì)出現(xiàn) “異常詳細(xì)信息: System.UnauthorizedAccessException: 拒絕訪問“。


最新更新
·C#中使用Split分隔字符串的技
·VS2008開發(fā)中Windows Mobile
·PC機(jī)和移動(dòng)設(shè)備上絕對(duì)路徑的
·C#程序加殼的方法(使用Sixx
·當(dāng)前上下文中不存在名稱Conf
·請(qǐng)插入磁盤:Visual Studio 2
·用VS.NET讀取Flash格式文件信
·在ASP.NET中使用AJAX的簡(jiǎn)單方
·VS.NET 2005中常用的一些代碼
·安裝VS.NET 2005 SP1補(bǔ)丁全攻
相關(guān)信息
·C#中使用Split分隔字符串的技巧
·PC機(jī)和移動(dòng)設(shè)備上絕對(duì)路徑的獲取(C#)
·C#程序加殼的方法(使用Sixxpack)
·當(dāng)前上下文中不存在名稱ConfigurationManager的解決方法
·C#的支付寶Payto接口代碼
·C#實(shí)現(xiàn)窗口最小化到系統(tǒng)托盤
·解密QQ的MsgEx.db消息文件格式
·QQ的TEA填充算法C#實(shí)現(xiàn)
·C#用Guid獲取不規(guī)則的唯一值(標(biāo)識(shí))
·基于Windows Mobile 5.0的掌上天氣預(yù)報(bào)設(shè)計(jì)
畫心
愚愛
偏愛
火苗
白狐
畫沙
犯錯(cuò)
歌曲
傳奇
稻香
小酒窩
獅子座
小情歌
全是愛
棉花糖
海豚音
我相信
甩蔥歌
這叫愛
shero
走天涯
琉璃月
Nobody
我愛他
套馬桿
愛是你我
最后一次
少女時(shí)代
灰色頭像
斷橋殘雪
美了美了
狼的誘惑
我很快樂
星月神話
心痛2009
愛丫愛丫
半城煙沙
旗開得勝
郎的誘惑
愛情買賣
2010等你來
我叫小沈陽
i miss you
姑娘我愛你
我們都一樣
其實(shí)很寂寞
我愛雨夜花
變心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK繃
貝多芬的悲傷
哥只是個(gè)傳說
丟了幸福的豬
找個(gè)人來愛我
要嫁就嫁灰太狼
如果這就是愛情
我們沒有在一起
寂寞在唱什么歌
斯琴高麗的傷心
別在我離開之前離開
不是因?yàn)榧拍畔肽?/a>
愛上你等于愛上了錯(cuò)
在心里從此永遠(yuǎn)有個(gè)你
一個(gè)人的寂寞兩個(gè)人的錯(cuò)