16,551
社区成员
发帖
与我相关
我的任务
分享int GetExcelRowCount(LPCOLESTR lpszFileName)
{
CLSID clsid;
LCID lcid = GetThreadLocale();
IDispatch *dispApp, *dispWorkbooks, *dispWorkbook, *dispSheet, *dispUsedRange, *dispRows;
LPOLESTR dispName;
DISPID dispID = 0, dispidNamed = 0;
DISPPARAMS dispParams = { 0 };
VARIANT vResult = { 0 }, vValue = { 0 };
CLSIDFromProgID(L"Excel.Application", &clsid);
CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&dispApp);
//App.Visible = TRUE
/*
dispName = L"Visible";
dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispidNamed = DISPID_PROPERTYPUT;
vValue.vt = VT_BOOL;
vValue.boolVal = TRUE;
dispParams.cArgs = 1;
dispParams.rgvarg = &vValue;
dispParams.cNamedArgs = 1;
dispParams.rgdispidNamedArgs = &dispidNamed;
dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYPUT, &dispParams, &vResult, NULL, NULL);
*/
//Workbooks = App.Workbooks
dispName = L"Workbooks";
dispApp->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispApp->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispWorkbooks = vResult.pdispVal;
dispApp->Release();
//Workbook = Workbooks.Open(lpszFileName);
dispName = L"Open";
dispWorkbooks->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
vValue.vt = VT_BSTR;
vValue.bstrVal = SysAllocString(lpszFileName);
dispParams.cArgs = 1;
dispParams.rgvarg = &vValue;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispWorkbooks->Invoke(dispID, IID_NULL, lcid, DISPATCH_METHOD, &dispParams, &vResult, NULL, NULL);
SysFreeString(vValue.bstrVal);
dispWorkbook = vResult.pdispVal;
dispWorkbooks->Release();
//Sheet = Workbook.ActiveSheet
dispName = L"ActiveSheet";
dispWorkbook->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispWorkbook->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispSheet = vResult.pdispVal;
dispWorkbook->Release();
//UsedRange = Sheet.UsedRange
dispName = L"UsedRange";
dispSheet->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispSheet->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispUsedRange = vResult.pdispVal;
dispSheet->Release();
//Rows = UsedRange.Rows
dispName = L"Rows";
dispUsedRange->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispUsedRange->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispRows = vResult.pdispVal;
dispUsedRange->Release();
//return Rows.Count
dispName = L"Count";
dispRows->GetIDsOfNames(IID_NULL, &dispName, 1, lcid, &dispID);
dispParams.cArgs = 0;
dispParams.rgvarg = NULL;
dispParams.cNamedArgs = 0;
dispParams.rgdispidNamedArgs = NULL;
dispRows->Invoke(dispID, IID_NULL, lcid, DISPATCH_PROPERTYGET, &dispParams, &vResult, NULL, NULL);
dispRows->Release();
return vResult.intVal;
}
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
exit(1);
}
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
char charDirectory[100];
GetCurrentDirectory(100,charDirectory);
CString strTemplateFile(charDirectory);
strTemplateFile = strTemplateFile + "\\MyTest.xls";
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strTemplateFile)));
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
rgMyRge.AttachDispatch(wsMysheet.GetUsedRange());
rgMyRge = rgMyRge.GetRows();
CString str;
str.Format("%d",rgMyRge.GetCount());
MessageBox(str);