IDE:Embarcadero XE5C++ Excel OLE自動化。設置整個單元格區域的值'一次'
我正在嘗試改進'export to excel'過程的性能(速度)。 該過程包含太多的OLE函數調用和屬性讀/寫調用,因此性能較差。
目前,網格(二維數組)通過逐步遍歷網格中的每個單元格並設置其值,導出爲excel。
我想將整個網格一次導出到excel單元格範圍內,但是我的嘗試失敗了。
現在對於Embarcadero的德爾福用戶,這似乎是一個簡單的任務:但是
// NOTE: This obviously won't compile, just showing the process.
var
arrData: Variant;
begin
// Create a 2D Variant array
arrData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
// Fill array with values...
// Get a range of cells, size equal to arrData dimensions...
Range.Value := arrData; // Done, easy.
end;
對於英巴卡迪諾C++ - 用戶(或者只是我自己),它似乎並沒有被所有的明顯。
我已經設法使用數據創建和填充一維數組,使用: VarArrayCreate,Embarcadero Example。
我試圖把該陣列分配給一個小區的範圍如下:
Variant vArray;
// Create and fill vArray with data. Test case.
int bounds[2] = {0, 4};
// Creates Variant array containing 5 elements of type varVariant.
// Can set the element type to varInteger as well for this case, made no difference to the end result.
vArray = VarArrayCreate(bounds, 1, varVariant);
// Fill vArray with test data, values 0,1,2,3,4
for (int index = 0; index < 5; index++) {
VarArrayPut(vArray, index, &index, 0);
}
Variant vWorkSheet; // Active excel worksheet
Variant vCells = vWorkSheet.OlePropertyGet(L"Cells");
Variant vRange; // A excel cell-range, equal in size to my vArray's size.
Variant vRange = vCells.OlePropertyGet(L"Range", vCells.OlePropertyGet(L"Item", 1, 1), vCells.OlePropertyGet(L"Item", 5, 1));
vRange.OlePropertySet(L"Value", vArray); // Similar to what is done in Delphi in example above.
...導致整個Excel單元格範圍的填充有在vArray
第一個值。
你將如何去創建多維Variant數組(在這種情況下是二維的)?
如何使用OLE將Variant數組分配給Excel單元格範圍?
請出示創建'vArray'的C++代碼。 –
更新了C++代碼段以顯示更多細節。 – HvS