Помогите кто сможет-
делаю:
var
aData: Variant;
S: String;
begin
aData := VarArrayCreate([1, 5], VarVariant);
FRange := RSheet.Range['A1:A5'];
aData := FRange.Value; // работает
S:= aData[1]; // НЕ РАБОТАЕТ!
end;
VarArrayCreate + Excel
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Ну-у-у, тут все просто!
Чтобы в этом убедиться используйте
VarArrayLowBound(aData,1); VarArrayHighBound(aData,1);
VarArrayLowBound(aData,2); VarArrayHighBound(aData,2);
Например
Вот пример кода, где производится и запись массива на лист и извлечение массива из листа:
Это лишний оператор. Так как по aData := FRange.Value; создается двумерный массив.aData := VarArrayCreate([1, 5], VarVariant);
Чтобы в этом убедиться используйте
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;
спасибо, все так и работает,
а то замучился длинные листы читать по ячейкам!
а то замучился длинные листы читать по ячейкам!