2010-06-15 10 views
9

Mithilfe von VSTO oder einer verwandten Technologie ist es möglich, eine Schaltfläche programmgesteuert in eine Zelle eines Excel-Arbeitsblatts einzubetten und so zu konfigurieren, dass eine C# -Funktion aufgerufen wird.Hinzufügen von Schaltflächen zu Tabellenkalkulationen in .NET (VSTO)

Wie?

Danke.

+0

A-Taste nicht in einer Zelle eingebettet werden kann - Tasten "schweben". Das Beste, was Sie tun können, ist, es zur Entwurfszeit mit einer Zelle auszurichten. – Jay

+0

Versuchen Sie, eine Schaltfläche dynamisch hinzuzufügen? Wie würde das ausgelöst werden? Und würde die C# in einem Add-In aufgerufen werden? Das klingt nach einem komplexen Setup, und mir ist nicht klar, warum Sie das tun möchten. Warum haben Sie nicht einfach ein VSTO-Add-In und ein Menü oder ein Menüband, das die Funktion von jedem Arbeitsblatt aus verfügbar macht? – Mathias

+0

@Jay: Ich kann damit leben. Gibt es Tipps, wie Sie eine Schaltfläche über meinem Arbeitsblatt platzieren können? @Mathias: Ja, ich möchte die Schaltflächen dynamisch hinzufügen und die C# -Rückrufe werden in einem Add-In sein. Der Zweck meines Add-Ins ist es, dem Benutzer zu helfen, 'Formulare' in einer Tabelle auszugeben, und ich möchte, dass einige der Formulare Schaltflächen enthalten. – mcoolbeth

Antwort

10

Mit einer VSTO-Dokumentanpassung (d. H. Einem Arbeitsbuch mit angehängtem .Net-Code) können Sie zur Laufzeit in den Arbeitsblättern des Projekts Steuerelemente hinzufügen und entfernen. Der folgende Code zeigt die Idee:

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!"); 
    } 

Sie könnten auch über eine VSTO-Add-in Steuerelemente dynamisch zu Dokumenten hinzufügen, entlang dieser Linien (dank Menschen auf der VSTO forum für diesen einen) unter Verwendung von Code:

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

Überprüfen Sie this post by Eric Carter für weitere Informationen.

0

Hier ist der Code, die für mich in VSTO-Add-In (modifizierte Version von Mathias Antwort) funktioniert:

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"); 
} 
Verwandte Themen