从 C++ 在 Excel 中写入单元格 - 未写入任何值,单元格为空白
Writing cell in Excel from C++ - no value written, cell is blank
当我使用 OLE 从 C++ 将单元格写入 Excel 中的单元格时,我得到一个空单元格。那里的任何值都会被覆盖为空白。虽然它写入了正确的单元格,所以看起来范围是正确的。这是我的代码。
VARIANT arr;
BSTR val = SysAllocString(L"hello excel world");
_bstr_t(val, false);
arr.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[1];
sab[0].lLbound = 1; sab[0].cElements = 1;
arr.parray = SafeArrayCreate(VT_VARIANT, 1, sab);
long indices[] = {1, 1};
SafeArrayPutElement(arr.parray, indices, (void*)&val);
AutoWrap(DISPATCH_PROPERTYPUT, NULL, range, L"Value", 1, arr);
我不明白如何正确地将参数传递给 Excel。它需要是一个变体,而不是一个裸体 BSTR:
VARIANT arr;
BSTR val = SysAllocString(L"hello excel world");
_bstr_t(val, false);
arr.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[2];
sab[0].lLbound = 1; sab[0].cElements = 1;
sab[1].lLbound = 1; sab[1].cElements = 1;
arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab);
long indices[] = {1, 1};
VARIANT valvariant;
valvariant.vt = VT_BSTR;
valvariant.bstrVal = val;
SafeArrayPutElement(arr.parray, indices, (void*)&valvariant);
AutoWrap(DISPATCH_PROPERTYPUT, NULL, range, L"Value", 1, arr);
当我使用 OLE 从 C++ 将单元格写入 Excel 中的单元格时,我得到一个空单元格。那里的任何值都会被覆盖为空白。虽然它写入了正确的单元格,所以看起来范围是正确的。这是我的代码。
VARIANT arr;
BSTR val = SysAllocString(L"hello excel world");
_bstr_t(val, false);
arr.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[1];
sab[0].lLbound = 1; sab[0].cElements = 1;
arr.parray = SafeArrayCreate(VT_VARIANT, 1, sab);
long indices[] = {1, 1};
SafeArrayPutElement(arr.parray, indices, (void*)&val);
AutoWrap(DISPATCH_PROPERTYPUT, NULL, range, L"Value", 1, arr);
我不明白如何正确地将参数传递给 Excel。它需要是一个变体,而不是一个裸体 BSTR:
VARIANT arr;
BSTR val = SysAllocString(L"hello excel world");
_bstr_t(val, false);
arr.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[2];
sab[0].lLbound = 1; sab[0].cElements = 1;
sab[1].lLbound = 1; sab[1].cElements = 1;
arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab);
long indices[] = {1, 1};
VARIANT valvariant;
valvariant.vt = VT_BSTR;
valvariant.bstrVal = val;
SafeArrayPutElement(arr.parray, indices, (void*)&valvariant);
AutoWrap(DISPATCH_PROPERTYPUT, NULL, range, L"Value", 1, arr);