2010-06-15 60 views
9

使用VSTO或某些相關技術,是否可以通過編程將按鈕嵌入Excel工作表的單元中,並將其配置爲在單擊時調用C#函數?將按鈕添加到.NET中的電子表格中(VSTO)

怎麼樣?

謝謝。

+0

A鍵不能嵌入在一個細胞 - 按鈕「浮動」。您可以做的最好的做法是在設計時將其與單元對齊。 – Jay 2010-06-15 16:21:07

+0

你想動態添加一個按鈕嗎?這將如何觸發?並且它會調用的C#是否在某個加載項中?這聽起來像一個複雜的設置,我不清楚你爲什麼要這麼做;爲什麼不簡單地有一個VSTO加載項,以及一個菜單或功能區,可以在任何工作表中使用該功能? – Mathias 2010-06-18 05:19:08

+0

@Jay:我可以接受這一點。有關如何在工作表上方浮動按鈕的任何提示? @Mathias:是的,我想動態地添加這些按鈕,並且C#回調函數將在一個加載項中。我的加載項的目的是爲了幫助用戶在電子表格中佈置「表單」,並且我希望某些表單可以包含按鈕。 – mcoolbeth 2010-06-18 18:20:05

回答

10

通過VSTO文檔自定義(即附帶.Net代碼的工作簿),您可以在運行時向項目的工作表添加和刪除控件。下面的代碼描述了一個思路:

public partial class Sheet1 
{ 
    private void Sheet1_Startup(object sender, System.EventArgs e) 
    { 
     var button = this.Controls.AddButton(10, 10, 50, 50, "My Button"); 
     button.Text = "My Button"; 
     button.Click += new EventHandler(button_Click); 
    } 

    void button_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("I was clicked!"); 
    } 

你也動態地將文檔通過VSTO使用代碼沿着這些線路(感謝在VSTO forum人們爲一個)控件添加插件,:

var workSheet = (Excel.Worksheet) sheet; 
var vstoSheet = workSheet.GetVstoObject(); 
var button = vstoSheet.Controls.AddButton(50, 50, 100, 50, "Test"); 
button.Text = "Dynamic Button!"; 

檢查this post by Eric Carter瞭解更多信息。

0

這裏是一個在VSTO工作對我來說加載(馬蒂亞斯的回答修改後的版本)的代碼:

using Excel = Microsoft.Office.Interop.Excel; 
using ExcelTools = Microsoft.Office.Tools.Excel; 

public void AddButtonToWorksheet() 
{ 
    Excel.Worksheet worksheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet; 
    ExcelTools.Worksheet vstoSheet = Globals.Factory.GetVstoObject(worksheet); 

    Button button = new Button(); 
    button.Text = "Dynamic Button!"; 
    vstoSheet.Controls.AddControl(
    button, 50, 50, 100, 50, "TestButton"); 
} 
相關問題