PDA

Просмотр полной версии : VarArrayCreate + Excel



Alexxx
16.09.2004, 15:05
Помогите кто сможет-
делаю:

var
aData: Variant;
S: String;

begin

aData := VarArrayCreate([1, 5], VarVariant);
FRange := RSheet.Range['A1:A5'];
aData := FRange.Value; // работает

S:= aData[1]; // НЕ РАБОТАЕТ!

end;

Naeel Maqsudov
17.09.2004, 03:08
Ну-у-у, тут все просто!


aData := VarArrayCreate([1, 5], VarVariant);

Это лишний оператор. Так как по aData := FRange.Value; создается двумерный массив.
Чтобы в этом убедиться используйте

VarArrayLowBound(aData,1); VarArrayHighBound(aData,1);
VarArrayLowBound(aData,2); VarArrayHighBound(aData,2);

Например


for i:=VarArrayLowBound(aData,1) to VarArrayHighBound(aData,1) do
for j:=VarArrayLowBound(aData,2) to VarArrayHighBound(aData,2) do begin
........ aData[i,j] ..............
end;


Вот пример кода, где производится и запись массива на лист и извлечение массива из листа:



procedure TForm1.Button1Click(Sender: TObject);
var
aData: Variant;
S: String;
FBook,FSheet,FRange: Variant;

begin
ExcelApplication1.Visible[1] := true;
FBook:=ExcelApplication1.Workbooks;
FBook:=FBook.add;
FSheet:=FBook.WorkSheets[1];
FSheet.Range['a1:c5'].value:=VarArrayOf([1, 10, 100]);
FSheet.Range['a2'].value:=123;
FSheet.Range['a3'].value:=123;

// aData := VarArrayCreate([1, 3], VarVariant); <--- Это ЛИШНЕЕ!!!
aData := FSheet.Range['A1:C1'].Value;
if varIsArray(aData) then showmessage('array') else showmessage('scalar');
s:=aData[1,2];
showmessage(s);
FBook.Close(false);
end;

Alexxx
17.09.2004, 13:21
спасибо, все так и работает,
а то замучился длинные листы читать по ячейкам!