2011-04-05 139 views
2

描述
我正在将Excel文件加载到WinForm webbrowser控件对象中。加载后,我可能需要打开其他Excel文件。但是,当浏览器控件加载时,它会阻止在使用双击时加载另一个工作簿。但是,如果我开始 - >运行Excel应用程序,然后选择文件 - >打开文档,它会加载,我可以在网页浏览器中的工作簿和刚才打开的工作簿之间进行切换。我使用.NET参考Microsoft.Office.Internet.Excel 14.0.0.0。Webbrowser控件中的Excel控件从其他文件锁定Excel

是否有反正在加载浏览器控件时双击打开文件?

代码WebBrowser控件中加载Excel文件

protected Microsoft.Office.Interop.Excel.Application _excelApp = null; 
protected Workbook _workbook = null; 
protected Worksheet _worksheet = null; 


//Load the Excel file in the WebBrowser control 
this.webBrowser.Navigate("MyFile.xls", false); 
//Get the ActiveXinstance from the WebBrowser Container    
SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)this.webBrowser.ActiveXInstance; 
//Make the web browser silent so dialog boxes are not displayed 
wb.Silent = true; 
//Assign the document to an object 
object odocument = wb.Document; 

//Convert the Document to an Excel application 
_excelApp = (Microsoft.Office.Interop.Excel.Application)odocument.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, odocument, null); 

//Do not display alerts 
_excelApp.DisplayAlerts = false; 

//Assign a workbook to the Excel application. Use .Count in case there are other workbooks open in the Excel application 
_workbook = (Workbook)_excelApp.Workbooks[_excelApp.Workbooks.Count]; 
//Assign a worksheet to the workbook (Excel objects are 1-based) 
_worksheet = (Worksheet)_workbook.Worksheets[1]; 

我试图启动另一个Excel进程WebBrowser控件的加载,但有同样的问题后:
System.Diagnostics.Process.Start(@"C:\Program Files\Microsoft Office\OFFICE11\Excel.exe");

我也尝试过创建另一个Excel对象,但.NET参考似乎将两者合并为一个过程: oXL=new Microsoft.Office.Interop.Excel.Application

我注意到了这个问题,VS2008被浏览了很多,但没有得到解决:https://stackoverflow.com/questions/2867744/webbrowser-locks-first-excel-instance

回答

0

我已经找到了解决办法。您必须使用Excel实例的IgnoreRemoteRequests属性。但请记住 - 此设置是永久性的,这就是为什么您必须在关闭应用程序之前将其值重新设置为False。的方法,例如:

public static void SetIgnoreRemoteRequests(WebBrowser bro, bool value) 
    { 
     if (bro.Document is Workbook) 
     { 
      ((Workbook)bro.Document).Application.IgnoreRemoteRequests = value; 
     } 
    } 

至于我,我在这OnLoadCompleted设置True,并在NavigatingFalse(因为我apllication与许多其他格式),并在web浏览器处置。