1

Excel にチェックボックスを追加していますが、タイプ 'System.__ComObject' の COM オブジェクトをインターフェイス タイプ 'Microsoft.Office.Interop.Excel.CheckBox' にキャストする際に問題が発生しました。Visual Studio 2008 と Office 2007 を使用して Web アプリに取り組んでいます。エラーは次の行で発生します:- chkBx = (Microsoft.Office.Interop.Excel.CheckBox)obj;

Microsoft.Office.Interop.Excel.OLEObjects objs = (Microsoft.Office.Interop.Excel.OLEObjects)mWSheet1.OLEObjects(System.Reflection.Missing.Value);

Microsoft.Office.Interop.Excel.OLEObject obj = objs.Add("Forms.CheckBox.1",
            System.Reflection.Missing.Value,
            System.Reflection.Missing.Value,
            false,
            false,
            System.Reflection.Missing.Value,
            System.Reflection.Missing.Value,
            234,
            234,
            108,
            21);

            Microsoft.Office.Interop.Excel.CheckBox chkBx;
            chkBx = (Microsoft.Office.Interop.Excel.CheckBox)obj;
            chkBx.Value = true;
            chkBx.Caption = "xyz";
4

1 に答える 1

0

それは単にそのインターフェースを実装していないので、あなたはそれをキャストすることができないように私には見えます。ここで説明する演算子をSystem.__ComObject使用して、がキャストせずにインターフェイスをサポートし、その結果として例外をスローするかどうかを確認できます。方法: Visual C#.NETでCOMオブジェクト(System .__ ComObject)の型を確認しますas

ワークシートにチェックボックスを追加するために間違った方法を使用しているのではないかと思います。ここで説明するように、実行するのがより一般的な方法ではありませんMicrosoft.Office.Tools.Excel.ControlCollection実行時にOfficeドキュメントにコントロールを追加する

を使用ControlCollectionした場合、コードは次のようになります。

private void AddCheckBox()
{
    Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(
        this.Application.ActiveWorkbook.Worksheets[1]);
    System.Windows.Forms.CheckBox checkbox = 
        new System.Windows.Forms.CheckBox();
    checkbox.Checked = true;
    checkbox.Text = "xyz"   
    vstoWorksheet.Controls.AddControl(234, 234, 108, 21, "checkbox1");
}
于 2012-01-28T19:32:55.813 に答える