(1)使用Microsoft.Office.Interop.Excel的權限設置
加入COM+物件,Microsoft Excel 11.0 Object Library

這時你可以 using Microsoft.Office.Interop.Excel;
但是當你實際呼叫去new一個Application物件時,
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
卻會發生權限不足的問題。所以我們要先替ASP.Net設定使用COM物件的權限。
在 開始->執行->輸入dcomcnfg 會出現元件服務的視窗。
展開樹狀列表中的DCOM設定,可以看到Microsoft Excel 應用程式(Application)的東西。點選滑鼠右鍵可以看到,如下畫面:
遇到權限問題,當然要做安全設定啦。在安全設定裏面依照需求開放權限,啟動和啟用權限是設定啟動COM物件的權限,存取權限是設定存取COM物件建立的東西的權限。
在這裡我將每個權限都設成自訂,然後點選編輯,接著就會出現常見的安全性設定畫面。在群組或使用者名稱裡面新增ASP.Net、IUSER_電腦名、IWAN_電腦名稱,如果你是使用Windows 2003 server那麼就要新增IIS_WPG、Network Service。
(2)動態建立Excel檔案
需要Using的命名
using System.IO;
using Microsoft.Office.Interop.Excel;
using System.Reflection;
需要使用的變數。
Workbook表示Excel檔,
Worksheet表示一個Excel檔裡面的sheet(一個Excel檔可以有很多sheet),
Range表示Excel裡面單元格的範圍。
Microsoft.Office.Interop.Excel.Application xlApp = null;
Workbook wb = null;
Worksheet ws = null;
Range aRange = null;
Range aRange2 = null;
object mObj_opt = System.Reflection.Missing.Value;
啟動Excel應用程式
xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
Response.Write("Error!");
return;
}
用
Excel應用程式建立一個Excel物件,也就是Workbook。並取得Workbook中的第一個sheet。這就是我們要操作資料的地方。
wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
ws = (Worksheet)wb.Worksheets[1];
if (ws == null)
{
Response.Write("Error!");
}
要在Excel儲存資料,有三種方式,以下分別介紹。利用
Range物件,
設定要儲存資料的儲存格範圍。
aRange = ws.get_Range("C19", "C25");
if (aRange == null)
{
Response.Write("Error!");
}
// Fill the cells in the C1 to C7 range of the worksheet with the number 6.
Object[] args = new Object[1];
args[0] = 6;
aRange.Value2 = args;
衍生自上面方法,但是在儲存資料的時候,可以用
InvokeMember呼叫aRange的資料成員(成員函式?)。
aRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange, args);
利用
Cells屬性,取得單一儲存格,並進行操作。
aRange2 = (Range)ws.Cells["26", "A"];
Object[] args2 = new Object[1];
args2[0] = "This is example for create excel!!";
aRange2.Value2 = args2;
最後,呼叫
SaveAs function儲存這個Excel物件到硬碟。
wb.SaveAs(filename, mObj_opt, mObj_opt
, mObj_opt, mObj_opt, mObj_opt
, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange
, mObj_opt, mObj_opt, mObj_opt
, mObj_opt, mObj_opt);
[第1、2頁]