有懂C++或者MFC修改已经打开的Excel内容的吗?
EXCEL窗口已经打开里面有内容,现在想修改它的内容,不是保存后修改,是直接改 现在可以用 GetActiveObject 来修改最开始打开的EXCEL窗口内容,但无法修改后面打开的,我是想先找到窗口,然后再修改内容(不是用模拟按键)。#include <iostream>
#include <Windows.h>
#include <comdef.h>
#include <Excel.h>
int main()
{
CoInitialize(NULL);
try
{
// 获取已经打开的Excel应用程序
Excel::_ApplicationPtr pXlApp;
HRESULT hr = pXlApp.GetActiveObject(L"Excel.Application");
if (FAILED(hr))
{
std::cout << "无法获取已打开的Excel应用程序。" << std::endl;
return 1;
}
// 获取活动工作簿
Excel::_WorkbookPtr pWorkbook = pXlApp->ActiveWorkbook;
if (pWorkbook == nullptr)
{
std::cout << "没有打开的工作簿。" << std::endl;
return 1;
}
// 获取活动工作表
Excel::_WorksheetPtr pWorksheet = pWorkbook->ActiveSheet;
// 修改单元格内容
// 例如,修改A1单元格的内容
Excel::RangePtr pRange = pWorksheet->Range;
pRange->Value2 = L"新内容";
std::cout << "单元格A1的内容已修改。" << std::endl;
// 如果需要,可以保存工作簿
// pWorkbook->Save();
}
catch (_com_error& e)
{
std::cout << "错误: " << e.Description() << std::endl;
}
CoUninitialize();
return 0;
} qq465881818 发表于 2024-10-13 20:05
#include
#include
还有Excel.h这个库?{:301_1009:} GetActiveObject 只能获取第一个实例。你提出的问题很正确。
操作多个Excel实例,查找正在运行的Excel进程,连接到特定的实例,然后进行操作
可以使用 GetObject 或者 FindWindow 等函数结合Windows API来枚举打开的窗口,从而获取特定的Excel实例。
具体思路:
使用 FindWindow 找到Excel窗口句柄:通过遍历系统中的窗口,找到与Excel相关的窗口。
使用 AccessibleObjectFromWindow:通过窗口句柄获取Excel的COM对象。
通过 IDispatch 调用Excel的接口:获取到Excel实例后,可以通过COM接口操作Excel对象。
FindWindow 用来获取Excel的窗口句柄。
AccessibleObjectFromWindow 用来从窗口句柄获取COM对象。
一旦获取到COM对象,就可以像平常通过 IDispatch 接口调用Excel的方法一样,操作Excel文件的内容。
然后就可以根据需要进一步扩展代码
页:
[1]