4、建立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 插件,在彈出的窗口中選擇你自定義的插件 再按下移除按鈕。具體步驟見下圖:
5、建立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 + "沒有不及格的同窗";
}
}
運行該項目結果爲:測試