我一直在尝试使用 C++ 在 Excel 书的末尾添加新的 Excel 工作表。但它返回错误,提示“未找到成员”。
以下是代码:
IDispatch* pSheets = NULL;
VARIANT result;
VariantInit(&result);
hr = AutoWrap(DISPATCH_PROPERTYGET, &result, _pExcelBook, L"Sheets", 0); //Able to get the excel workbook pointer
if (FAILED(hr))
{
return hr;
}
result.pdispVal->QueryInterface(&pSheets);
IDispatch* pNewSheet = NULL;
if (NULL != pSheets)
{
int curBookSheetCount = GetTotalSheetCount(pSheets); //returns the sheet count properly
{
VARIANT result, vParm;
vParm.vt = VT_I4;
vParm.lVal = curBookSheetCount;
hr = AutoWrap(DISPATCH_METHOD, &result, pSheets, L"Item", 1, vParm); // Failed here
if (FAILED(hr))
{
VariantClear(&vParm);
return hr;
}
result.pdispVal->QueryInterface(&pAftrSheet);
}
VARIANT result, var1, var2;
VariantInit(&result);
var1.pdispVal = NULL;
var1.vt = VT_NULL;
var2.pdispVal = pAftrSheet;
var2.vt = VT_DISPATCH;
AutoWrap(DISPATCH_METHOD, &result, pSheets, L"Add", 2, var2, var1);
result.pdispVal->QueryInterface(&pNewSheet);
}
为什么这里失败了?请提出您的答案。
另外,下面的 vb 代码的 C++ 等价物是什么?
XLSheet.Range("A3", "H3").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
在 C++ 中 AutoWrap 函数的参数应该是什么来设置上述属性?
能够解决第一个错误。我犯了一个错误。我应该是 PROPERTY_GET 而不是 METHOD。
hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pSheets, L"Item", 1, vParm);
请提出第二个问题的答案。