2013-12-14 2 views
0

Этот вопрос задан другими людьми несколько лет назад, но пока нет ответов (https://go4answers.webhost4life.com/Example/excel-web-browser-control-locks-other-206723.aspx), у нас есть аналогичная проблема и нам нужно решение, поэтому я вставляю здесь. Обратите внимание, что мы используем System.Windows.Forms.WebBrowser, это отличается от его вопроса:Откройте несколько файлов excel в WebBrowser, только последний активируется

background: Чтобы автоматизировать и внедрять Excel в приложении формы Windows, я использовал элемент управления webBrowser.

Я могу перейти в файл Excel без problem.To Navigate я использую

System.Windows.Forms.WebBrowser WebBrowserExcel; this.WebBrowserExcel.Navigate (имя файла, false);

После перехода к файлу Excel я запрашиваю текущую таблицу объектов для прикрепления к рабочей книге, а затем манипулирую ячейками в книге.

public Workbook GetActiveWorkbook(string xlfile) { 


IRunningObjectTable prot=null; 
       IEnumMoniker pmonkenum=null; 
       try { 

        //return m_Workbook;  
        IntPtr pfetched = IntPtr.Zero; 
        // Query the running object table (ROT) 
        if (GetRunningObjectTable(0, out prot) != 0 || prot == null) return null; 
        prot.EnumRunning(out pmonkenum); 
        pmonkenum.Reset(); 
        IMoniker[] monikers = new IMoniker[1]; 
        while (pmonkenum.Next(1, monikers, pfetched) == 0) 
        { 
         IBindCtx pctx; string filepathname; 
         CreateBindCtx(0, out pctx); 
         // Get the name of the file 
         monikers[0].GetDisplayName(pctx, null, out filepathname); 
         // Clean up 
         Marshal.ReleaseComObject(pctx); 
         // Search for the workbook 
         if (filepathname.IndexOf(xlfile) != -1) 
         { 
          object roval; 
          // Get a handle on the workbook 
          prot.GetObject(monikers[0], out roval); 
          return roval as Workbook; 
         } 
        } 
       } catch { 
        return null; 
       } finally { 
        // Clean up 
        if(prot!=null) Marshal.ReleaseComObject(prot); 
        if(pmonkenum!=null) Marshal.ReleaseComObject(pmonkenum); 
       } 
       return null; 
      } 

код работает отлично, и я могу работать с книгой Excel ПОКА никакая другая книга не открыта в системе (другой рабочей книги открывается двойным щелчком по файлу в локальной системе).

Ниже сценарий:

1) Я открыл книгу из проводника, дважды щелкнув по нему. Назовем это Excel A. Это запустило процесс EXCEL.EXE. 2) Я перешел к другой книге Excel из своего веб-браузера Windows Form. Назовем это Excel B. Excel B открывается в Form.It использует уже существующий EXCEL.EXE, запущенный на шаге 1. 3) Теперь, если я попытаюсь отредактировать Excel A (открыт в шаге 1). Это не позволяет мне. Фокус всегда присутствует в Excel B (перемещается на шаге 2). Я не могу редактировать ячейки, выбрать текст или даже закрыть Excel A.

Пожалуйста, сообщите мне о любых решениях для его решения.

+0

Что случилось с использованием Excel Interop? Зачем вставлять веб-браузер? –

+0

Существует требование, чтобы при щелчке пользователем чего-то нам нужно получить информацию ячейки excel и сделать что-то в этом инструменте. – user3004921

+0

Итак? Что случилось с использованием Excel Interop? –

ответ

0

Эта проблема была решена с помощью тяжелой работы команды и с помощью глубокой поддержки Microsoft. Я разделяю окончательное решение в проектах с открытым исходным кодом Google https://code.google.com/p/form-based-excel-solution/

Смежные вопросы