這一個主題我實在想不到該如何做成一個PPT檔。
所以直接做一個Sample比較快。
為了簡化範例,所以我都Default的命名。
以下的範例是用VS2008+Excel2007
這個Sample Sheet1的功能:
1.輸入一SQL string。
2.透過Web Service去執行這段sql
3.把回傳的結果show在excel中
Step1:新增一個VSTO的Excel 2007 Workbook專案
專案成功建立後畫面會長的像這樣
VS2008裡面為什麼辦法把Excel檔開起來呢?當然是開發的機器也要安裝Excel
你會發現到在這個Project中有一個Excel檔。也就是說我們開發的程式是跟著這個Excel走的。
如果你希望你開發的是Excel外掛,請用Excel 2007 Add-in。
不過它沒有支持像下圖一樣的圖形化開發介面。所以我們先用Excel 2007 Workbook專案來當sample。
Step2:新增一個Actions Pane Control
你可以發現其實Actions Pane他是繼承Windows Form的UserControl而已。沒有很複雜
加入一個TextBox1和一個Button。(允許TextBox輸入多行,不做也沒關系)
Step3. coding
到ActionsPaneControl1.cs的程式碼裡面去吧
加入2個using
using Excel = Microsoft.Office.Tools.Excel;
using System.Data;
為button1 click的事件 加入code
private void button1_Click(object sender, EventArgs e)
{
//停止Excel畫面上 即時的變化。
Globals.Sheet1.Application.ScreenUpdating = false;
Microsoft.Office.Tools.Excel.ListObject list1;
Microsoft.Office.Interop.Excel.Range cell = Globals.Sheet1.Range["$A$1", System.Reflection.Missing.Value];
if (Globals.Sheet1.Controls.Contains("list1"))
{
list1 = Globals.Sheet1.Controls["list1"] as Excel.ListObject;
}
else
{
list1 = Globals.Sheet1.Controls.AddListObject(cell, "list1");
}
//事先準備好的Web Service。用Add Web Reference加入
ServiceReference1.Service1SoapClient client = new ServiceReference1.Service1SoapClient();
//呼叫Web Service回傳結果dt
DataTable dt = client.ExecuteSql(textBox1.Text);
list1.AutoSetDataBoundColumnHeaders = true;
list1.SetDataBinding(dt, null);
Globals.Sheet1.Application.ScreenUpdating = true;
}
最後到sheet1.cs找到Sheet1_Startup方法加入以下的code
private void Sheet1_Startup(object sender, System.EventArgs e)
{
Globals.ThisWorkbook.ActionsPane.Controls.Add(new ActionsPaneControl1());
}
Step4:Config
maxReceivedMessageSize="6553600"
maxBufferSize="6553600"
這是Web Service的config
預設的size有點小
所以我把他加大了
這2個config的用一樣大 。
不然會error。
想知道為什麼,可以自己試試看。
在這裡先不討論這個問題
Step5:Testing
可以看到右邊長出一個Actions Pane
我在TextBox輸入Select * From Orders。我的Service撈的資料是NorthWind的範例資料
沒有留言:
張貼留言