C#で現在のワークブックオブジェクトを取得する

私はExcelスプレッドシートにカスタムドキュメントのプロパティを作成するC#でアプリケーションを作成していますが、ワークブックオブジェクトを取り込むための関数があります。

しかし、実際に現在のワークブックオブジェクトを取得することは非常に面倒です。ExcelDNAを使用して機能を追加していますが、有効なワークブックCOMオブジェクトを渡すことはできません。

6

4 答え

C#でアクティブワークブックを検索する必要がある場合は、Office Interopを使用している場合は、次のようなコードを試すことができます。

(Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;

[ソース]

15
追加された
ソースはもはや利用できません。私はこれを働かせることはできません。誰かがこのために良い情報源を投稿することはできますか?マーシャルとして非常に興味があるのは、私にとってもExcelの新しいインスタンスを作成していることです。
追加された 著者 Ja Austin,
これは、Excelの新しいインスタンスを起動する Marshal.GetActiveObject( "Excel.Application"); とは異なり、毎回動作します
追加された 著者 Joan-Diego Rodriguez,
@AdamNumberFive、そうです。あなたは、あなたが持っているExcelアプリケーションインスタンスを使ってActiveWorkbookプロパティを見ても、Excelオブジェクトを使ってほぼ同じことができます。
追加された 著者 Michael Kingsmill,

これは私が現在やっている方法です。本当にうまくいくようです

 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

それから私はあなたが持っているものを試し、それがどのように動作するか見てみる

お役に立てれば

14
追加された
Excel-DNAから、ExcelDnaUtil.Applicationを呼び出して、Marshal.GetActiveObjectが返すアクティブな最後のExcelインスタンスではなく、実行中のExcelプロセス用のApplicationオブジェクトを取得します。
追加された 著者 Govert,
ええ、私はあなたに何か質問があれば、私はかなり優れた仕事をしています。私はこれがあなたを助けることを願って!!!!
追加された 著者 Russell Saari,
優秀な。あなたは私の英雄です、これは私が持っていたかなり厄介な問題を修正した、私は推測する目の新しいペアが必要!とても有難い。
追加された 著者 Adam H,
@ RussellSaari答えをありがとう。 Excelのインスタンスが2つ開いている場合、このメソッドは常に最初に開いたインスタンスを返します。つまり、第2のブックは、それがアクティブなものであっても返されることはない。ファイルが開いているインスタンスに関係なく、現在のブックをどのように取得しますか?
追加された 著者 regmi,

@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;
7
追加された
私はxlappのNullReferenceを取得しています。何か変わった?これはまだ動作するはずですか?
追加された 著者 regmi,

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

1
追加された