C# 操作 Excel

來源:互聯網
上載者:User

首先將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(0, true); 
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.web>中添加<identity impersonate="true"/>
否則就會出現 “異常詳細資料: System.UnauthorizedAccessException: 拒絕訪問“。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.