私はExcelスプレッドシートにカスタムドキュメントのプロパティを作成するC#でアプリケーションを作成していますが、ワークブックオブジェクトを取り込むための関数があります。
しかし、実際に現在のワークブックオブジェクトを取得することは非常に面倒です。ExcelDNAを使用して機能を追加していますが、有効なワークブックCOMオブジェクトを渡すことはできません。
これは私が現在やっている方法です。本当にうまくいくようです
using Excel = Microsoft.Office.Interop.Excel;
次に、アクティブなワークブックを取得します
//Gets Excel and gets Activeworkbook and worksheet
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
oXL = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
oXL.Visible = true;
oWB = (Excel.Workbook)oXL.ActiveWorkbook;
docProps = oWB.CustomDocumentProperties
それから私はあなたが持っているものを試し、それがどのように動作するか見てみる
お役に立てれば
@Govertが彼のコメントで上で説明したように:
using Excel = Microsoft.Office.Interop.Excel;
using ExcelDna.Integration;
// Get the correct application instance
Excel.Application xlapp = (Excel.Application)ExcelDnaUtil.Application;
// Get active workbook
Excel.Workbook wbook = xlapp.ActiveWorkbook;
GetActiveObject()は実行オブジェクトテーブル(ROT)を検索し、開いた最後のExcelインスタンスを表示します。これは、トップZオーダーウィンドウに対応していない可能性があります。
Z順にループし、一致するブックを見つけます。
See this link: - https://social.msdn.microsoft.com/Forums/office/en-US/060000d8-a899-49bf-a965-0576dee958d4/how-to-get-active-application?forum=exceldev