как привести тип объекта COM к типу Excel.Checkbox - PullRequest
1 голос
/ 28 января 2012

Я добавляю флажок в excel и у меня возникает проблема приведения COM-объекта типа 'System .__ ComObject' к типу интерфейса 'Microsoft.Office.Interop.Excel.CheckBox', любая помощь будет принята с благодарностью! Я работаю над веб-приложением с использованием Visual Studio 2008 и Office 2007. Ошибка в этой строке: - 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";

1 Ответ

0 голосов
/ 28 января 2012

Мне кажется, что вы не можете разыграть его, потому что он просто не реализует этот интерфейс. Вы можете проверить, поддерживает ли System.__ComObject интерфейс без приведения и, следовательно, генерировать исключение, используя оператор as, как описано здесь: КАК: Проверить тип COM-объекта (System .__ ComObject) с помощью Visual C # .NET .

Интересно, если вы используете неправильный метод, чтобы добавить флажок на листе. Разве это не самый распространенный способ пройти через 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");
}
...