1.前言:
透過DDE通訊的方式,當改變EXCEL中的資料時,動態更新資料到C#的Winform中。

2.說明:
動態資料交換(Dynamic Data Exchange,簡稱DDE),可在應用程序之間做數據交換及命令調用,DDE 的說明可參考
http://en.wikipedia.org/wiki/Dynamic_Data_Exchange

NDde是一個開放原始碼,透過NDde可以用C#程式語言來接收DDE資料,或是作成DDE Server傳送資料給DDE Client。
NDde的DLL檔及相關說明文件可從下列網址下載:
http://ndde.codeplex.com/

準備EXCEL檔案,確認以下事項:
-->檔案中需要查詢資料的頁籤名稱: 例如Sheet1
-->查詢資料的範圍: 例如從R1C1到R6C2

建立C# Winform新專案,加入參考NDde.dll
加入命名空間

using NDde.Client;

定義Client

DdeClient client = new DdeClient("excel", @"D:\tmp\b.xls\sheet1");

Form開啟與結束事件

private void Form1_Load(object sender, EventArgs e)
{
	client.Advise += new EventHandler(client_Advise);
	client.Connect();
	client.StartAdvise("r1c1:r6c2", 1, true, 60000);
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
	if (client.IsConnected == true)
	{
		client.Disconnect();
	}
}

Advise事件

private void client_Advise(object sender, DdeAdviseEventArgs e)
{
	byte[] itemByte;
	string itemString = "";
	string errMessage = "";
	
	try
	{
		itemByte = e.Data;
		itemString = Encoding.GetEncoding("Big5").GetString(itemByte, 0, itemByte.Length);

		txtMessage.Invoke(new EventHandler(delegate
		{
			txtMessage.Clear();
			txtMessage.Text = itemString;
		}));
	}
	catch (NDde.DdeException ex)
	{
		errMessage = ex.Message;
	}   
}

圖例: 測試時,先開啟Excel的檔案,再開啟執行自己的專案,當改變檔案中內容時,Winform的表單內容也即時更新

 

DDE_ExcelToWinform  

arrow
arrow
    文章標籤
    C# DDE Excel NDde
    全站熱搜

    西夏普 發表在 痞客邦 留言(1) 人氣()