Страница 1 из 1
VarArrayCreate + Excel
Добавлено: 16 сен 2004, 15:05
Alexxx
Помогите кто сможет-
делаю:
var
aData: Variant;
S: String;
begin
aData := VarArrayCreate([1, 5], VarVariant);
FRange := RSheet.Range['A1:A5'];
aData := FRange.Value; // работает
S:= aData[1]; // НЕ РАБОТАЕТ!
end;
Добавлено: 17 сен 2004, 03:08
Naeel Maqsudov
Ну-у-у, тут все просто!
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;
Добавлено: 17 сен 2004, 13:21
Alexxx
спасибо, все так и работает,
а то замучился длинные листы читать по ячейкам!