I try to set an excel column to autofit width using com automation. I get an access violation when calling Invoke. I know that the range that points to the column is ok, because I can use it to change the color, for instance.
This is my code
DISPID dispid1;
dispid1 = GetDispID(pWorksheet, L"Columns");
VARIANT arg;
arg.vt = VT_I4;
arg.intVal = col;
DISPPARAMS dp = {
&arg, NULL, 1, 0
};
VariantInit(&vResult);
hr = pWorksheet->Invoke(dispid1, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dp, &vResult, NULL, NULL);
if (FAILED(hr)) {
ShowMessage("fail");
return;
}
pRange = vResult.pdispVal;
if (!pRange) {
return;
}
DISPID dispid2;
OLECHAR* szAutoFit = L"AutoFit";
hr = pRange->GetIDsOfNames(IID_NULL, &szAutoFit, 1, LOCALE_USER_DEFAULT, &dispid2);
if (FAILED(hr)) {
ShowMessage("fail");
return;
}
// the below call displays an access violation
hr = pRange->Invoke(dispid2, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, NULL, NULL,
NULL, NULL);
if (FAILED(hr)) {
ShowMessage("fail");
return;
}