none
Excel внутри формы Windows Forms RRS feed

  • Вопрос

  • Для работы с Excel приложением раньше исользовал Addin, теперь необходимо весь функционал перенести в отдельное Windows Forms приложение, что вроде как удачно происходит с применением 

    Microsoft.Office.Interop.Excel.Application

    Подскажите, как указать приложению Excel, чтобы оно вызывалось внутри формы или панели Windows Forms, т.е. необходимо

    запустить Excel не в отдельном окне, а внутри формы, в окне приложения (вроде MDI Child). Возможно ли это?

    18 января 2013 г. 21:01

Ответы

Все ответы

  • using System.Runtime.InteropServices;
    using System.Diagnostics;
    using System.Threading;
    
    
    
    [DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
    
    
    Process p = Process.Start("excel.exe");
    p.WaitForInputIdle();
    SetParent(p.MainWindowHandle, this.Handle); // panel.Handle, etc


    • Помечено в качестве ответа Abolmasov Dmitry 24 января 2013 г. 12:35
    19 января 2013 г. 4:13
  • Почему-то, в результате работы данного кода SplashScreen 2010 - го Экселя отображается внутри панели, после чего окно запускается в обычном режиме, отдельно и независимо от моего приложения.

    Необходимо получить доступ к окну Экселя, запущенного подобным образом:

                    ExcelApplication = new Microsoft.Office.Interop.Excel.Application();                 ExcelApplication.Visible = true;

    Вряд ли я смогу получить доступ к выделенному Range (что необходимо для дальнейшей работы), если запущу excel.exe через процесс (или я ошибаюсь?)

    Вся соль в том, что при работе с программой будут открываться несколько xls и xlsx файлов, которые легко спутать, и я хотел отображать каждый такой файл внутри отдельных MDI форм определенного типа.

    Возможно ли указать Parent Window hWnd для Microsoft.Office.Interop.Excel.Application ?

    Среди параметров Workbooks.Open я тоже ничего подобного найти не смог:

    ExcelWorkbook = ExcelApplication.Workbooks.Open(fileName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);


    19 января 2013 г. 15:15
  • Привет

    Запущенный объект Excel вы можете также получить с помощью кода:

    public Excel.Application StartExcel()
    {
        Excel.Application instance = null;
        try
        {
           instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
        }
        catch (System.Runtime.InteropServices.COMException ex)
        {
           instance = new Excel.ApplicationClass();
        }
        return instance;
    }

    Подробнее об этом - Launching Office Apps Programmatically

    Еще один способ встроить Excel в форму - использование WebBrowser - Как использовать элемент управления WebBrowser для открытия документов Office в Visual C# 2005 или Visual C# .NET


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 24 января 2013 г. 12:35
    21 января 2013 г. 11:14