技术vs艺术

技术是扎实的基本功,艺术是丰富的想象力;技术的突破总是从夸张的想像中开始的。

博客园 首页 新随笔 联系 订阅 管理

在最新的Visual Studio 2005中,为我们提供了一个WebBrowser的封装控件,这个控件隐藏了底层的axWebBrowser控件,我们就利用WebBrowser控件来完成我们的ExcelActiveDocument的嵌入和操作。在此之前,你需要将Office.Net库安装到你的机器上。

1
.在你的工具栏上选择WebBrowser控件,将其放到你的Form



2
.在Form上增加一个控件来使其加载一个Excel文件,如下:



Button
的事件处理程序:

privatevoidbutton1_Click_1(objectsender, EventArgs e)

{

   stringstrFileName =@"d:\a.xls";

   Object refmissing = System.Reflection.Missing.Value;

   this.webBrowser1.Navigate(strFileName);

   objectaxWebBrowser =this.webBrowser1.ActiveXInstance;

}


3.
增加WebBrowserDocumentComplete事件处理程序

privatevoidwebBrowser1_DocumentCompleted_1(objectsender, WebBrowserDocumentCompletedEventArgs e)

{

   Object refmissing = System.Reflection.Missing.Value;

   object[] args =newobject[4];

   args[0] = SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS;

   args[1] = SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER;

   args[2] = refmissing;

   args[3] = refmissing;

 

   objectaxWebBrowser =this.webBrowser1.ActiveXInstance;

 

   axWebBrowser.GetType().InvokeMember("ExecWB",

       BindingFlags.InvokeMethod,null, axWebBrowser, args);

 

 

   objectōApplication = axWebBrowser.GetType().InvokeMember("Document",

       BindingFlags.GetProperty,null, axWebBrowser,null);

 

   Excel.Workbook wbb = (Excel.Workbook) oApplication;

   Excel.ApplicationClass excel = wbb.ApplicationasExcel.ApplicationClass;

   Excel.Workbook wb = excel.Workbooks[1];

   Excel.Worksheet ws = wb.Worksheets[1]asExcel.Worksheet;

   ws.Cells.Font.Name ="Verdana";

   ws.Cells.Font.Size = 14;

   ws.Cells.Font.Bold =true;

   Excel.Range range = ws.Cells;

 

   Excel.Range ōCell = range[10, 10]asExcel.Range;

   oCell.Value2 ="你好";

}


这里要注意,WebBrowser加载Excel文档后,并不显示工具栏,为此我们需要使用高级一点的技术,通过反射调用底层的方法来实现,首先我们需要找到WebBrowser封装的AxWebBrowser控件。

objectaxWebBrowser =this.webBrowser1.ActiveXInstance;


然后,我们调用反射来显示工具栏

Object refmissing = System.Reflection.Missing.Value;

object[] args =newobject[4];

args[0] = SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS;

args[1] = SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER;

args[2] = refmissing;

args[3] = refmissing;

 

axWebBrowser.GetType().InvokeMember("ExecWB", BindingFlags.InvokeMethod,null, axWebBrowser, args);


注:如果你直接使用AxWebBrowser控件,那你就可以直接调用ExecWB方法来显示工具栏。如下:

axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, refmissing, refmissing)


好了,现在你需要获得你的Excel对象来操作Excel,此时需要使用Office.Net库来完成。代码如下:

objectōApplication = axWebBrowser.GetType().InvokeMember("Document",

   BindingFlags.GetProperty,null, axWebBrowser,null);

 

Excel.ApplicationClass excel = wbb.ApplicationasExcel.ApplicationClass;

Excel.Workbook wb = excel.Workbooks[1];

<P class=MsoNormal style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; BACKGROUND: #eeefe6; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: left; mso
posted on 2010-04-20 11:11  邓春光  阅读(3860)  评论(1编辑  收藏  举报