1. 程式人生 > >VSTO學習(三)——建立Excel解決方案

VSTO學習(三)——建立Excel解決方案

四、建立Excel外接程式
介紹完了Excel物件模型之後,我們就可以利用這些物件來對Excel文件進行操作了,下面就建立一個簡單的Excel外接程式的。
首先我們模擬一個需求,大多說軟體在使用時都會彈出一個歡迎介面,這樣我們就建立一個外接程式,每次開啟Excel檔案時彈出一個歡迎介面,退出時彈出“謝謝使用”介面。
我們只需要在上面的建立工程中介入下面的程式碼即可:

複製內容到剪貼簿
程式碼:
using System.Windows.Forms;

namespace MyExcelAddIn1
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// 因為歡迎使用視窗要在開啟Excel的時候彈出,所以把下面程式碼放在Startup方法內
MessageBox.Show("歡迎使用Microsoft Excel");
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
// 在退出Excel的時候彈出謝謝使用視窗,所以把下面的程式碼放在Shutdown方法內
MessageBox.Show("謝謝使用!");
}

#region VSTO generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}

#endregion
}
}

這樣,我們就完成了上面簡單的一個模擬需求了,下面讓我們按F5來測試下效果吧!
按F5執行該程式時,首先開啟一個Excel之後,一個歡迎介面就會彈出:

點選Excel視窗上的"X"按鈕時,就會彈出一個 “謝謝使用!”的視窗,效果如下:

點選 Ok 按鈕之後才會正常退出Excel。這樣就完成了一個簡單的Excel外接程式了,上面提到過外接程式是應用程式級別的,所以當你每次開啟Excel的時候都會有這樣的一個歡迎介面和關閉Excel時都有一個"謝謝使用"視窗,有些朋友想問了,如果我想解除安裝這個外掛怎麼辦呢?方法很簡單,只需要右鍵你的解決方案——>清理,這樣可以了,另外你也可以從開發工具選項卡——>COM 外掛,在彈出的視窗中選擇你自定義的外掛 再按下移除按鈕。具體步驟見下圖:


五、建立Excel文件級自定義項
介紹完了建立Excel外接程式之後,下面看看如何建立一個文件級的專案:
1. 新建一個Excel 2010 Workbook(即Excel工作簿)專案:

2. 單擊 OK按鈕,在下面的視窗中單擊 ”OK“按鈕:

3. 在第一建立Excel工作簿專案是會彈出下面的一個視窗(視窗意思為:是否允許建立的專案訪問VBA專案系統),此時我們只需要點選“Ok”就完成了Excel工作簿專案的建立。

現在我們來模擬一個需求,比如現在有一個成績單工作表,我們希望獲得各科目不及格同學的名字。此時我們只需要在上面建立的工作簿專案中新增一個ComboBox,一個Button,一個textbox。在button的Click事件中新增下面的程式碼:

複製內容到剪貼簿
程式碼:
// 找出各科目不及格同學的名字
private void btnSearch_Click(object sender, EventArgs e)
{
// 清除textbox中的內容
txtResult.Clear();

// 從複選框中獲得選擇的科目索引
int subjectIndex = cbxsubjects.SelectedIndex; 
if (subjectIndex == -1)
{
MessageBox.Show("請先選擇一個科目");
return;
}

// 獲得選擇的科目名稱
string subjectName = cbxsubjects.SelectedItem.ToString();
// 獲得工作表物件
Excel.Worksheet worksheet =(Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;

for (int row = 2; row < worksheet.UsedRange.Rows.Count+1; row++)

Excel.Range rng =(Excel.Range)worksheet.Cells[row,subjectIndex + 2];
Excel.Range rng1 = (Excel.Range)worksheet.Cells[row, 1];
if (rng.Value< 60)
{
txtResult.Text += rng1.Value + "; ";
}
}
if (txtResult.Text.Length == 0)
{
txtResult.Text = subjectName + "沒有不及格的同學";
}
}

執行該專案結果為: