2015-10-15 179 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); 
相關問題