vc++如何获取已经打开的EXCEL文件对象?

inchorn 2016-09-01 10:46:23
请教VC++里,我用下面的代码,首先判断EXCEL文件是否打开 如果打开了 就获取这个对象给book,关闭它,如果没有打开就open函数打开。
HANDLE hFile = CreateFile(pathname,FILE_ALL_ACCESS,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
HRESULT hr = GetLastError();
if ( ERROR_ACCESS_DENIED == hr || ERROR_SHARING_VIOLATION == hr)
{
// 文件被占用

}
}
else
{
// 文件未被打开
CloseHandle(hFile);
}

我不知道如何获取这个已经打开的对象,就是把已经打开的EXCEL文件对象赋值给book对象,也就没法操作它,没法关闭它。文件被占用后,获取并关闭它,代码怎么写
...全文
508 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
inchorn 2016-09-02
  • 打赏
  • 举报
回复
这么复杂啊 看不懂啊
6057 2016-09-01
  • 打赏
  • 举报
回复
CLSID clsid; HRESULT hr; // Option 1. Get CLSID from ProgID using CLSIDFromProgID. LPCOLESTR progID = L"Excel.Application"; hr = CLSIDFromProgID(progID, &clsid); if (FAILED(hr)) { MessageBox(_T("启动服务失败"),NULL,NULL); return 1; } // Option 2. Build the CLSID directly. // Start the server and get the IDispatch interface IDispatch *pExcelApp = NULL; hr = CoCreateInstance( // [-or-] CoCreateInstanceEx, CoGetObject clsid, // CLSID of the server NULL, CLSCTX_LOCAL_SERVER, // Word.Application is a local server IID_IDispatch, // Query the IDispatch interface (void **)&pExcelApp ); // Output if (FAILED(hr)) { return 1; } //Make Excel invisible. (i.e. Application.Visible = 0) { VARIANT x; x.vt = VT_I4; x.lVal = 1; AutoWrap(DISPATCH_PROPERTYPUT, NULL, pExcelApp, L"Visible", 1, x); } // open IDispatch *pBooks = NULL; { VARIANT result; VariantInit(&result); AutoWrap(DISPATCH_PROPERTYGET, &result, pExcelApp, L"Workbooks", 0); pBooks = result.pdispVal; } // Call Workbooks.Open() to get a book IDispatch *pbook = NULL; { m_strFileName=_T("excel文件路径"); VARIANT result; VARIANT vtFileName; vtFileName.vt = VT_BSTR; vtFileName.bstrVal = SysAllocString(m_strFileName); VariantInit(&result); AutoWrap(DISPATCH_METHOD, &result, Workbooks, L"Open",1,vtFileName); pbook = result.pdispVal; }
oyljerry 2016-09-01
  • 打赏
  • 举报
回复
hFile 就是对应的文件句柄。
inchorn 2016-09-01
  • 打赏
  • 举报
回复
请高手解答一下

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧