如何获取已经打开的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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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