使用 Visual C++(COM) 在 Excel 的末尾或特定位置添加 Excel 工作表

问题描述 投票:0回答:1

我一直在尝试使用 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 函数的参数应该是什么来设置上述属性?

excel visual-c++ com excel-interop com-automation
1个回答
0
投票

能够解决第一个错误。我犯了一个错误。我应该是 PROPERTY_GET 而不是 METHOD。

hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pSheets, L"Item", 1, vParm);

请提出第二个问题的答案。

© www.soinside.com 2019 - 2024. All rights reserved.