// InsertAfterSheets.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp,
LPOLESTR ptName, int cArgs...) {
va_list marker;
va_start(marker, cArgs);
if(!pDisp) {
_exit(0);
}
DISPPARAMS dp = { NULL, NULL, 0, 0 };
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispID;
HRESULT hr;
char buf[200];
char szName[200];
WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);
hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT,
&dispID);
if(FAILED(hr)) {
sprintf(buf, "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx",
szName, hr);
printf("%s\n",buf);
_exit(0);
return hr;
}
VARIANT *pArgs = new VARIANT[cArgs+1];
for(int i=0; i<cArgs; i++) {
pArgs[i] = va_arg(marker, VARIANT);
}
dp.cArgs = cArgs;
dp.rgvarg = pArgs;
if(autoType & DISPATCH_PROPERTYPUT) {
dp.cNamedArgs = 1;
dp.rgdispidNamedArgs = &dispidNamed;
}
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp,
pvResult, NULL, NULL);
if(FAILED(hr)) {
sprintf(buf, "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx",
szName, dispID, hr);
printf("%s\n",buf);
_exit(0);
return hr;
}
va_end(marker);
delete [] pArgs;
return hr;
}
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hresult;
CLSID xlCLSID;
IDispatch *xlApp;
VARIANT pvResult;
hresult = OleInitialize(NULL);
if(SUCCEEDED(hresult)){
CLSIDFromProgID(L"Excel.Application",&xlCLSID);
hresult = CoCreateInstance(xlCLSID,NULL,
CLSCTX_LOCAL_SERVER|CLSCTX_INPROC_SERVER,
IID_IDispatch,(void **)&xlApp);
if(SUCCEEDED(hresult)){
if(SUCCEEDED(hresult)){
VARIANT x;
x.vt = VT_I4;
x.lVal =1;
hresult = AutoWrap(DISPATCH_PROPERTYPUT,NULL,xlApp,L"Visible",1,
x);
if(SUCCEEDED(hresult)){
printf("ddd\n");
IDispatch *xlBooks;
VariantInit(&pvResult);
hresult = AutoWrap(DISPATCH_PROPERTYGET, &pvResult, xlApp,
L"Workbooks", 0);
if(SUCCEEDED(hresult)){
printf("ddsx\n");
xlBooks = pvResult.pdispVal;
IDispatch *xlBook;
hresult = AutoWrap(DISPATCH_PROPERTYGET,&pvResult,
xlBooks,L"Add",0);
xlBook = pvResult.pdispVal;
IDispatch *xlSheets;
hresult = AutoWrap(DISPATCH_PROPERTYGET,&pvResult,
xlBook,L"Sheets",0);
xlSheets = pvResult.pdispVal;
if(SUCCEEDED(hresult)){
IDispatch *xlSheet;
VARIANT p1;
p1.vt = VT_INT;
p1.intVal = 3;
hresult = AutoWrap(DISPATCH_PROPERTYGET,&pvResult,
xlSheets,L"Item",1,p1);
xlSheet = pvResult.pdispVal;
if(SUCCEEDED(hresult)){
VARIANT m;
m.vt = VT_ERROR;
m.scode = DISP_E_PARAMNOTFOUND;
hresult = AutoWrap(DISPATCH_PROPERTYGET,
&pvResult,xlSheets,L"Add",4,m,m,pvResult,m);
if(SUCCEEDED(hresult)){
printf("Insert it after the last sheet");
}
}
}
}
}
}
}
else
printf("No\n");
}
system("pause");
CoUninitialize();
return 0;
}
调用COM来实现在最后一个Worksheet后插一个新的Worksheet
最新推荐文章于 2022-10-22 16:27:47 发布