Excel アドインを開発しています。リボンが読み込まれると、ボタンを含むセル コンテキスト メニューを追加します。ファイルを選択するボタンのクリック イベントにハンドラーを追加します。Excel を実行すると、デフォルトの最初のシートで問題なく動作します。ただし、新しいシートを開くと、クリックしても何も起こりません。なんで?
私のリボンロード機能:
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
Helper.SetVar(Globals.ThisAddIn.Application, Globals.Factory);
}
ツールボックス dll を参照するいくつかの追加があります。ツールボックス dll の public static Helper クラスの setVar 関数は次のとおりです。
public static void SetVar(Excel.Application appSource, Microsoft.Office.Tools.Excel.ApplicationFactory FactorySource)
{
if(path=="")
{
string fullPath = typeof(Helper).Assembly.CodeBase;
string theDirectory = Path.GetDirectoryName(fullPath);
path = new Uri(theDirectory).LocalPath;
}
if (app == null)
app = appSource;
if (Factory == null)
Factory = FactorySource;
rightClickMenu();
}
次の rightClickMenu を呼び出します。
public static void rightClickMenu()
{
bool val = false;
removeRightClickMenu(ref val);
Office.CommandBarPopup ctrl = (Office.CommandBarPopup)app.CommandBars["Cell"].Controls.Add(Type: Office.MsoControlType.msoControlPopup, Before: 1);
ctrl.Caption = "Perso";
Office.CommandBarButton btn = (Office.CommandBarButton)ctrl.Controls.Add(Type: Office.MsoControlType.msoControlButton);
btn.Caption = "Sélectionner un fichier";
btn.Click += new Office._CommandBarButtonEvents_ClickEventHandler(selectFile);
}
クリックハンドラは次のとおりです。
public static void selectFile(Office.CommandBarButton ctrl, ref bool Cancel)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
var filename = openFileDialog1.FileName;
//var filename = openFileDialog1.SafeFileName;
app.ActiveCell.Value = filename;
}
}