日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[VSTO系列]三、简单的UI设计/QQ联系人导出(下)

發布時間:2024/1/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [VSTO系列]三、简单的UI设计/QQ联系人导出(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接上一篇:http://www.cnblogs.com/longqi293/archive/2010/12/22/vstoforexcel2.html,我們通過VSTO,簡單的使用了Ribbon控件,以及如何從QQ郵箱導出聯系人。

在有了這些基礎之后,我們來開始一個比較復雜的實驗吧,這回,我們將對那個生成的聯系人Excel文檔進行處理,提取出每個好友的QQ號碼,然后再將這些號碼對應的復制到這些聯系人后面。具體效果如何,還是慢慢來看。

慢慢來——

首先,還是建立一個Excel2007的外接程序項目,然后向項目中添加項,選擇Office——>功能區(可視化設計),如下圖:

我們雙擊新添加的那個文件,即可打開UI設計界面。

接下來呢,我們就要開始編輯Ribbon1的設計界面了,拖放一個Button空間到Group中,如下圖:

我們的程序見面如下所示:

粗略的設計就是如此,大家可以花點時間,慢慢研究Ribbon自帶的各類控件的使用,相信通過一段時間,大家能夠設計出自己所喜歡的外觀。在這里就僅作演示吧。

我們要做什么——

接下來,我們開始最關鍵的代碼編寫工作了,首先,我們要明白三件事:

  • 獲取某一列的所有單元格數據
  • 處理每一個單元格的數據
  • 把處理后的數據添加到指定列中進行顯示

所以,很明確,我們的代碼也分為這幾步,首先,獲取當前的工作薄,其中的某一個區域,我們使用get_range方法來實現,就本例子而言呢,騰訊郵箱生成的那個聯系人表格,B列,是每個人的QQ郵箱,我們的QQ號碼就從這里提取,提取到郵箱后,把@符號及之后的字符去掉,保留前端的QQ號碼,并把處理過后的結果,放到該表格的指定列里面。大致意圖,如下所示:

當然了,上圖所示,綠色區域為指定的顯示列,紅色區域為待處理,實際中,綠色的部分可以隨意指定。在這里也是舉個例子罷了。好啦,有圖了,接下來是尋求真相的過程。

通過之前的分析,我們需要先鋪墊個小知識:

如何獲取一定區域(范圍)的單元格?

這個相信大家谷歌一下絕對能找出方法,這里就不在贅述,此文的方法為使用Worksheet的get_range方法,在MSDN中,詳細的介紹了此方法的使用,小弟也給出地址,大家可以慢慢參考:http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.get_range(v=VS.100).aspx

這是一個英文地址,為什么呢?主要是它比較關鍵的說道,在這個方法的參數中,可以使用語意參數,比如,我要獲取A1到C4這個4x4區域范圍的所有單元格,你可以這么寫get_range("A1:C4",Type.Missing)。

反而中文版的文檔中,卻沒提到……不知道是不是我沒找到還是什么的……>_<|||.

這個問題一解決了,那后面的事情就好辦了,看代碼:

private void GetRidOfQQ()
{
////初始化一個Worksheet實例,用于獲取當前激活的工作薄
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;

////計算目標列的行數,這里不是很科學,推薦使用UsedRange屬性進行統計
int rows = ws.get_Range("B2:B125", Type.Missing).Count;

////初始化一個數組,用于保存處理后的號碼
string[] QQNum = new string[rows];

for (int j = 0; j < rows; )
{
foreach (Range rng in ws.get_Range("B2:B125", Type.Missing))///獲取指定范圍內的單元格集合
{
QQNum[j]
= rng.Value2.ToString().Replace("@qq.com", "");
j
++;
}
}

Globals.ThisAddIn.Application.Cells[
1, 11] = "QQ號碼";
for (int i = 1; i <= QQNum.Count(); i++)
{
////注意,這里的Cells索引值從1開始計算
Globals.ThisAddIn.Application.Cells[i + 1, 11] = QQNum[i - 1];////往指定單元格賦值
}
}

相信注釋已經比較詳細了,代碼不太美觀,也僅僅作為演示使用了。

之后,為那個Ribbon上的按鈕添加單擊事件代碼:

try
{
GetRidOfQQ();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}

ok,至此,這個程序就制作完畢了,下面就是來看看運行效果對不對,測試結果如下圖:

小結:

大家也許看到了吧,如果聯系人用了一個文字類的郵箱替代了QQ號碼郵箱,則這個結果是文字的,并不能夠當做QQ號碼來用,所以,這次示例的局限性也很明顯,收到了聯系人表格的限制,不過,我們也從簡單的RibbonUI設計,走到了具體的Excel對象操作,接下來,還有各種各樣的Excel對象操作,內容包羅萬象,可想而知不是一個系列就能寫完的,我們關注的是VSTO能給我們帶來什么新的變化。

試想,客戶已經基于Office套件,進行著各類業務數據的存儲、處理,相對來說,比較成熟。但是某一天,他需要對Excel表格數據進行一些不大不小的分析,比如報表、統計等等。難道我們給他從Asp.net開始……Bla……Bla。

我們換個思路,緊緊抓住客戶最關心的業務來開展我們的工作,直接為Excel客戶端開發Add-In級別的插件,以解決最實際的需求為目標,這不是更好嗎?當然,效率、可維護性、可擴展性……等等一大堆話題將會被引入……

這只是我一己之見吧,希望廣大園友熱烈拍磚~~

下一節,將會帶來一些部署方面的說明和探討。

總結

以上是生活随笔為你收集整理的[VSTO系列]三、简单的UI设计/QQ联系人导出(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。