2015-10-15 139 views
0

当我使用OLE将C++中的单元格写入Excel中的单元格时,我得到一个空单元格。无论什么价值被覆盖为空白。它虽然写在正​​确的单元格中,但看起来范围是正确的。这是我的代码。从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); 
+1

当你只是想写一个字符串时使用数组有什么意义吗?请注意[本博客文章](http://blogs.msdn.com/b/eric_carter/archive/2004/05/04/126190.aspx)对于火箭科学,您需要一个二维数组。 –

+0

没有意义,我从https://support.microsoft.com/en-us/kb/216686 –

+0

得到了这个主意@HansPassant,我改成了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); 但仍然相同的结果 –

回答

0

我不明白如何正确地将参数传递给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); 
相关问题