請教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物件,也就沒法操作它,沒法關閉它。檔案被占用后,獲取并關閉它,代碼怎么寫
uj5u.com熱心網友回復:
請高手解答一下uj5u.com熱心網友回復:
hFile 就是對應的檔案句柄。uj5u.com熱心網友回復:
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;
}
uj5u.com熱心網友回復:
這么復雜啊 看不懂啊轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/126394.html
標籤:基礎類
上一篇:mfc發送txt檔案資料求助
下一篇:新建mfc應用程式出錯該怎么解決
