当我们实现from功能的时候需要把excel表嵌入到自己程序的C# form中,给客户一个不用切换窗口的简单的操作界面,下面笔者就为你讲讲在c#中如何实现。

当咱们完结from功用的时分需求把excel表嵌入到自己程序的C# form中,给客户一个不必切换窗口的简略的操作界面,下面笔者就为你讲讲在C#中怎么完结。

简略完成C# form中嵌入并操作excel表(C#winform窗口中如何导入Excel)  C# form 第1张

一、先要增加对Excel的引证。挑选项目-〉增加引证-〉COM-〉增加Microsoft Excel 9.0。(不同的office讲会有不同版别的dll文件)。

  1. usingExcel;
  2. usingSystem.Reflection;
  3. //发生一个Excel.Application的新进程
  4. Excel.Applicationapp=newExcel.Application();
  5. if(app==null)
  6. {
  7. statusBar1.Text="ERROR:EXCELcouldn'tbestarted!";
  8. return;
  9. }
  10. app.Visible=true;//假如只想用程序控制该excel而不想让用户操作时分,能够设置为false
  11. app.UserControl=true;
  12. Workbooksworkbooks=app.Workbooks;
  13. _Workbookworkbook=workbooks.Add(XlWBATemplate.xlWBATWorksheet);//依据模板发生新的workbook
  14. //_Workbookworkbook=workbooks.Add("c:\\a.xls");//或许依据绝对路径翻开作业簿文件a.xls
  15. Sheetssheets=workbook.Worksheets;
  16. _Worksheetworksheet=(_Worksheet)sheets.get_Item(1);
  17. if(worksheet==null)
  18. {
  19. statusBar1.Text="ERROR:worksheet==null";
  20. return;
  21. }
  22. //Thisparagraphputsthevalue5tothecellG1
  23. Rangerange1=worksheet.get_Range("A1",Missing.Value);
  24. if(range1==null)
  25. {
  26. statusBar1.Text="ERROR:range==null";
  27. return;
  28. }
  29. constintnCells=2345;
  30. range1.Value2=nCells;

二、将Excel用户界面嵌入到自己的C# form中

因为现在,C#和vb.net都不支撑OLE技能(拜见微软支撑中心Info:304562),,所以只需运用WebBrowser控件来完结此功用。(以下办法拜见微软支撑中心Howto:304662)

1、右击东西箱,挑选自定义东西箱,增加COM组件,挑选“Microsoft Web 阅读器”(对应文件是\winnt\system32\shdocvw.dll),确认。在东西箱中将会呈现文本为Explorer的WebBroser控件图标。

2、在C#form1中增加WebBrowser控件。(目标名却省是axWebBrowser1)

3、假定要翻开的excel文件是: c:\a.xls。

  1. stringstrFileName=@"c:\a.xls";
  2. Objectrefmissing=System.Reflection.Missing.Value;
  3. axWebBrowser1.Navigate(strFileName,refrefmissing,refrefmissing,refrefmissing,refrefmissing);

值得注意的是用WebBrowser控件不支撑菜单兼并,也便是说无法把Excel表的菜单带入到咱们的程序中。这是相对于OLE完结办法的一大缺陷。幸亏供给了能够把东西栏增加进来的功用,通过东西栏能够进行许多Excel专有的操作。

  1. //下面这句能够将excel自身的东西调增加进来
  2. axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS,
    SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
    refrefmissing,refrefmissing);

三、回到本文提出的问题,怎么操作嵌入的Excel?

首要需求理解,用WebBrowser“装载”Excel"表,实际上依然是在新的进程空间中运转Excel.exe。能够用使命管理器调查。因而,只需咱们能够获取Excel.Application目标,就能像上文一中所说的那样操作Excel数据。
幸亏能够通过WebBrowser的办法NavigateComplete供给的事情参数e来访问Excel.Application。

  1. publicvoidaxWebBrowser1_NavigateComplete2(objectsender,AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Evente)
  2. {
  3. Objecto=e.pDisp;
  4. ObjectoDocument=o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
  5. ObjectoApplication=o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
  6. //ObjectoName=o.GetType().InvokeMember("Name",BindingFlags.GetProperty,null,oApplication,null);
  7. //因为翻开的是excel文件,所以这儿的oApplication其实便是Excel.Application
  8. Excel.ApplicationeApp=(Excel.Application)oApplication;//这样就能够象上文中所述来操作Excel了。
  9. }

四、包括该webbrowser的C# form退出时分,怎么确保excel进程也退出?(拜见microsoft协助中心kb317109)

因为WebBrowser只不过是对Excel表的阅读,而Excel在独自的进程中运转。所以要确保对该Excel目标eApp及其相应的一切成员变量都开释引证,才干确保在Form退出时excel进程跟着退出。这一点在一个程序需求屡次翻开封闭excel表时尤为重要。

  1. Excel.ApplicationoApp;
  2. Excel.WorkbooksoBooks;
  3. Excel.WorkbookoBook;
  4. Excel.WorksheetoSheet;
  5. ...........
  6. privatevoidExcelExit()
  7. {
  8. NAR(oSheet);
  9. oBook.Close(False);
  10. NAR(oBook);
  11. NAR(oBooks);
  12. oApp.Quit();
  13. NAR(oApp);
  14. Debug.WriteLine("Sleeping...");
  15. System.Threading.Thread.Sleep(5000);
  16. Debug.WriteLine("EndExcel");
  17. }
  18. privatevoidNAR(Objecto)
  19. {
  20. try{System.Runtime.InteropServices.Marshal.ReleaseComObject(o);}
  21. catch{}
  22. finally{o=null;}
  23. }

通过实验,我发现除了开释这些变量以外,有必要把该axWebBroswer1也销销毁,Excel进程才退出。不然的话,即便让axWebBroser1去Navigate空内容"about:blank", excel进程依然不会退出。因而应该将axWebBroser1地点的C# form封闭掉,或许直接调用axWebBrowser1.Dispose

【修改引荐】

  1. 浅析C# XmlSerializer概念及效果
  2. C# XmlSerializer完结序列化浅析
  3. 浅析C# Xml Serializer的安全隐患
  4. C# XML序列化实例学习诠释
  5. 浅析XML序列化的优缺陷
转载请说明出处
知优网 » 简略完成C# form中嵌入并操作excel表(C#winform窗口中如何导入Excel)

发表评论

您需要后才能发表评论