VSTOまたは関連するテクノロジを使用して、Excelワークシートのセルにボタンをプログラムで埋め込み、クリックしたときにC#関数を呼び出すように構成することはできますか?
どのように?
ありがとう。
VSTOまたは関連するテクノロジを使用して、Excelワークシートのセルにボタンをプログラムで埋め込み、クリックしたときにC#関数を呼び出すように構成することはできますか?
どのように?
ありがとう。
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 フォーラムのユーザーに感謝します)。
var workSheet = (Excel.Worksheet) sheet;
var vstoSheet = workSheet.GetVstoObject();
var button = vstoSheet.Controls.AddButton(50, 50, 100, 50, "Test");
button.Text = "Dynamic Button!";
詳細については、Eric Carter によるこの投稿を確認してください。
これは、VSTOアドインで機能するコードです(Mathiasの回答の修正版):
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");
}