如何获取已经打开的Excel程序

1.C#方式

复制代码
 1 _Application excelApp;
 2 try
 3 {
 4   excelApp = (_Application)Marshal.GetActiveObject("Excel.Application");
 5 }
 6 catch(Exception)
 7 {
 8   // this is important. If Excel is not running, GetActiveObject will throw
 9   // an exception
10   excelApp = null;
11 }
12 if( excelApp == null )
13 {
14   excelApp = new ApplicationClass();
15 }
复制代码

 

2.VB

复制代码
 1      Dim xlsApp As Application
 2      Dim xlsWorkSheet As Worksheet
 3      Dim xlsRange As Range
 4      Set xlsApp = CreateObject("Excel.Application.8")
 5      xlsApp.Visible = True
 6      xlsApp.SheetsInNewWorkbook = 1
 7      With xlsApp.Workbooks
 8     If (.Count = 0) Then
 9     .Add
10     End If
11      End With
12      Set xlsWorkSheet = xlsApp.Worksheets.Item(1)
13      xlsWorkSheet.Range("A1").Value = "Easy"
复制代码

 

3.MFC

复制代码
 1 LPDISPATCH      pDispatch = NULL;
 2     LPUNKNOWN       pUnknown = NULL;
 3     CLSID      clsid;
 4     _Application    appExcel;
 5     LPDISPATCH      pWorkbooks = NULL;
 6     Workbooks       Workbooks;
 7     LPDISPATCH      pWorkbook = NULL;
 8     LPDISPATCH      pWorksheets = NULL;
 9     Sheets     Worksheets;
10     LPDISPATCH      pWorksheet = NULL;
11     _Worksheet      Worksheet;
12     LPDISPATCH      pWorkRange = NULL;
13     Range      WorkRange;
14     CLSIDFromProgID( L"Excel.Application.8", &clsid );
15     // 看指定的对象是否已经运行
16     if ( SUCCEEDED(GetActiveObject(
17          clsid, NULL, &pUnknown )) )
18     {
19         VERIFY( SUCCEEDED(pUnknown->QueryInterface(
20             IID_IDispatch, (void**)&pDispatch )) );
21         ASSERT( pDispatch );
22         appExcel.AttachDispatch( pDispatch );
23         pUnknown->Release();
24     }
25     else
26     {
27         // 没运行。那就建立Excel.Application.8对象
28         if ( ! appExcel.CreateDispatch(
29             (LPCTSTR)"Excel.Application.8") )
30         {
31            MessageBox(
32            "can not found the Excel.Application.8 object!");
33            return;
34         }
35     }
36     // 显示并激活Excel窗口
37     // XLMAIN 是用Spy++查到的
38     HWND hWndExcelMain = ::FindWindow( "XLMAIN", NULL );
39     ASSERT( hWndExcelMain );
40     ::ShowWindow( hWndExcelMain, SW_SHOW );
41     ::UpdateWindow( hWndExcelMain );
42     ::BringWindowToTop( hWndExcelMain );
43     // 设置在一个新工作簿中的工作表数为1
44     appExcel.SetSheetsInNewWorkbook( 1 );
45     // 得到工作簿集的IDispatch,并绑定到Workbooks对象
46     pWorkbooks = appExcel.GetWorkbooks();
47     ASSERT( pWorkbooks );
48     Workbooks.AttachDispatch( pWorkbooks );
49     // 如果工作簿集是空的,那就添加一个工作簿
50     if ( Workbooks.GetCount() == (long)0 )
51     {
52         pWorkbook = Workbooks.Add();
53         ASSERT( pWorkbook );
54     }
55     // 得到工作表集(同上)
56     pWorksheets = appExcel.GetWorksheets();
57     ASSERT( pWorksheets );
58     Worksheets.AttachDispatch( pWorksheets );
59     // 激活第一个工作表
60     pWorksheet = Worksheets.GetItem(
61         COleVariant((short)1) );
62     ASSERT( pWorksheet );
63     Worksheet.AttachDispatch( pWorksheet );
64     Worksheet.Select( COleVariant((short)TRUE) );
65     // 得到A1区域的引用
66     pWorkRange = Worksheet.GetRange(
67         COleVariant("A1"), COleVariant("A1"));
68     WorkRange.AttachDispatch( pWorkRange );
69     WorkRange.SetValue(
70         COleVariant("多简单!就是麻烦一点儿!") );
71     if ( pWorkbook )
72 
73         pWorkbook->Release();
复制代码

 

posted @   unicornsir  阅读(1189)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示