雖然很簡單,不過總算踏出第一步了…
2009年9月30日 星期三
2009年9月27日 星期日
Tech Days 2009的感想
Tech Days 2009
在技術與知識3天的洗禮
讓我靜下來思考一些問題
自己在過去的一年裡
對新事物的追求很像變得遲頓了
自己的熊度很像變差了
是要好好的整理一番了
為什麼我看到新的技術會這麼開心
我一直在想為什麼 我給了自己一個答案
因為有一群擁有熱情的人
運用他們的生命、智慧創造了這些東西
經過這些新的技術
我感染到他們的熱情了
在工作上
我把自己寫出來的程式視為自己的作品
我希望我能投入更多的熱情
進而也讓見到它們的人
感受到我的熱情、也能夠跟我一樣有開心的感覺
VSTO Excel XmlMapping
Step1:事先準備好一個xml檔cat.xml
這個xml檔是用DataTable產生出來的
<?xml version="1.0" standalone="yes"?>
<CATs>
<CAT>
<NAME>Izzy</NAME>
<BREED>Siamese</BREED>
<AGE>6</AGE>
<ALTERED>yes</ALTERED>
<DECLAWED>no</DECLAWED>
<LICENSE>Izz138bod</LICENSE>
<OWNER>Colin Wilcox</OWNER>
</CAT>
<CAT>
<NAME>Izzy</NAME>
<BREED>Siamese</BREED>
<AGE>6</AGE>
<ALTERED>yes</ALTERED>
<DECLAWED>no</DECLAWED>
<LICENSE>Izz138bod</LICENSE>
<OWNER>Colin Wilcox</OWNER>
</CAT>
</CATs>
Step2:顯示開發工具
Step3:
新增一個VSTO Excel 2007 WorkBook專案。新增後點選[開發人員],再按一下[來源]。就會在excel畫面的右邊
看到xml來源的actions pane。
Step4:
點選[XML 對應…]。彈出[XML對應]對話視窗後,按[新增]選取cat.xml檔。選好按確定後。畫面如下。
Step 5:
按住CAT。拖曳到A1放開後,按一下重新整理。就可以看到下面的畫面了
Step 6:Coding
private void Sheet1_Startup(object sender, System.EventArgs e)
{
Globals.ThisWorkbook.XmlMaps.Add("cat.xml", "CATs").Name = "CATs_MAP";
Globals.ThisWorkbook.XmlMaps[1].Import("cat.xml", true);
}
然後就可以Testing了
VSTO -Excel+ActionsPane+WebService
這一個主題我實在想不到該如何做成一個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的範例資料
2009年9月26日 星期六
善用開放原始碼的寶藏庫 CodePlex
2009年9月19日 星期六
2009年9月12日 星期六
好的程式是…內外兼俱的
2009年9月10日 星期四
2009年9月9日 星期三
2009年9月6日 星期日
XBOX360-CAPCOM Stree Fighter IV FightStick…工欲善其事,必先利其器
這是Brandon教我的
(是不是推給別人就沒事了呢…)
因為原來的RB、LB 是住在上面2個小小的。
面板上只有六個按鈕
要放一次按三顆的招式都放不太出來…
於是乎…
Brandon給了我很充分的理由…