Подтвердить что ты не робот

Не может быть встроен. Вместо этого используйте соответствующий интерфейс

Я пытаюсь добавить фотографию в лист Excel Spread, но продолжаю получать следующую ошибку:

Ошибка 1 Тип взаимодействия "Microsoft.Office.Interop.Excel.ApplicationClass" не может быть встроена. Вместо этого используйте соответствующий интерфейс.

ApplicationClass(); подчеркивается красным цветом в строке кода ниже:

xlApp = new Excel.ApplicationClass();

Может ли кто-нибудь рассказать мне, как я могу это исправить?

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;

private void btnWriteSpreedSheet_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass(); //This is where the problem is??????
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //add some text 
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
            xlWorkSheet.Cells[2, 1] = "Adding picture in Excel File";

            xlWorkSheet.Shapes.AddPicture("C:\\csharp-xl-picture.JPG", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 50, 50, 300, 45);

              xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlApp);
            releaseObject(xlWorkBook);
            releaseObject(xlWorkSheet);

            MessageBox.Show ("File created !");
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 

    }
4b9b3361

Ответ 1

В своем проекте разверните "Ссылки", найдите ссылку Microsoft Office Interop. Щелкните правой кнопкой мыши и выберите свойства и измените "Вставить типы взаимодействия" на false.

Ответ 2

Как объясняется в блоге MSDN, вместо отключения "Встраивать типы взаимодействия" вы также можете изменить

xlApp = new Excel.ApplicationClass();

в

xlApp = new Excel.Application();

Хотя Excel.Application является интерфейсом, мы можем создать его экземпляр, поскольку он украшен атрибутом CoClass, как объяснено в этом другом ответе SO: fooobar.com/questions/147153/...

Использование этого подхода (Embed Interop Types = true) имеет то преимущество, что вам нужно будет развертывать меньше файлов с вашим проектом, а встроенные типы будут содержать только методы и типы, которые фактически использует ваше приложение. При использовании внешних сборок взаимодействия вы импортируете туда все типы и методы, предоставляемые указанной библиотекой.

Ответ 3

Найдите ссылку Microsoft.Office.Interop.Excel и щелкните правой кнопкой мыши и измените состояние "Вставить типы Interop" в состояние falce, если оно истинно.