Size: a a a

2021 January 22

JM

Jane Mix in Delphi & Lazarus
Катерина Свиридова
for j:=0 to 17 do t_2[j] := ..
А буквы как меняться будут? Которые указывают на столбец
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Char(Ord('C')+j) что-то вроде этого
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Так-то функцией пользуюсь
function ExcelCellsValue(ASheet: OLEVariant; ARow, ACol: integer): string;
var
 v: Variant;
begin
 result := '';
 try
   v := ASheet.Cells[ARow,ACol].Value;
   if VariantIsEmpty(v) then exit;
   if VarType(v)=varError then exit;
   result := Trim(v);
 except
   result := '';
 end;
end;
источник

JM

Jane Mix in Delphi & Lazarus
Не понимаю, что она делает
источник

КС

Катерина Свиридова... in Delphi & Lazarus
текст ячейки возвращает )
источник

JM

Jane Mix in Delphi & Lazarus
Просто в моем примере выдергиваются определенные столбцы при определенных введенных данных
источник

КС

Катерина Свиридова... in Delphi & Lazarus
ARow-строка, ACol-колонка
источник

JM

Jane Mix in Delphi & Lazarus
Катерина Свиридова
Так-то функцией пользуюсь
function ExcelCellsValue(ASheet: OLEVariant; ARow, ACol: integer): string;
var
 v: Variant;
begin
 result := '';
 try
   v := ASheet.Cells[ARow,ACol].Value;
   if VariantIsEmpty(v) then exit;
   if VarType(v)=varError then exit;
   result := Trim(v);
 except
   result := '';
 end;
end;
Совершенно не понимаю, как ее применить(
источник

КС

Катерина Свиридова... in Delphi & Lazarus
T_2 массив чего? Может не так поняла)
источник

КС

Катерина Свиридова... in Delphi & Lazarus
for iserch:=1 to .. do
 for j=0 to 17 do
   t_2[j] := ExcelCellsValue(Sheet_,iserch,j+2);
Ты же строки записываешь? А вместо ['C'+Float..] должно ['C',Float..]?
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Не +2, а +3. Это же 'C'
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Пошла работой заниматься )
источник

O

Oleg in Delphi & Lazarus
Jane Mix
Я только так смог, но по моему это полный бред.
Идея обращаться к ActiveSheet вместо конкретного рабочего листа таит опасность выгрузить не те данные, если книга будет сохранена с другим активным листом (оператор щёлкнул ярлык другого листа, нажал сохранить - всё, у нас проблемы). Правильнее обращаться к листу по его имени. Тогда вообще неважно, какой лист активен и где по порядку находится этот лист. Конечно, кроме случая, когда обращение именно к активному листу является осознанным решением исходя из бизнес-логики.
источник

O

Oleg in Delphi & Lazarus
И само по себе обращение к книге Excel через OLE обладает такими недостатками, как необходимость иметь установленный MS Office и общая невысокая скорость работы.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Oleg
Идея обращаться к ActiveSheet вместо конкретного рабочего листа таит опасность выгрузить не те данные, если книга будет сохранена с другим активным листом (оператор щёлкнул ярлык другого листа, нажал сохранить - всё, у нас проблемы). Правильнее обращаться к листу по его имени. Тогда вообще неважно, какой лист активен и где по порядку находится этот лист. Конечно, кроме случая, когда обращение именно к активному листу является осознанным решением исходя из бизнес-логики.
+
источник

AS

Alexey Shumkin in Delphi & Lazarus
Катерина Свиридова
Так-то функцией пользуюсь
function ExcelCellsValue(ASheet: OLEVariant; ARow, ACol: integer): string;
var
 v: Variant;
begin
 result := '';
 try
   v := ASheet.Cells[ARow,ACol].Value;
   if VariantIsEmpty(v) then exit;
   if VarType(v)=varError then exit;
   result := Trim(v);
 except
   result := '';
 end;
end;
Тут есть один "нюанс"/ограничение - получение значения ОДНОЙ ячейки...
Если надо получить значения всей таблицы (ну, какого-то диапазона ячеек) , это будет ооооооооооооочень медленно..
источник

AS

Alexey Shumkin in Delphi & Lazarus
Jane Mix
Я только так смог, но по моему это полный бред.
Есть вариант проще и красивей, и правильнее:
Получить сразу значения всего массива ячеек... (При применении того же OLE, хотя ещё быстрее было бы использовать чтение напрямую файла посредством какой-нибудь либы, для того предназначенной.
Пример через OLE могу привести позже, ща не за компом
источник

AS

Alexey Shumkin in Delphi & Lazarus
zamtmn
вуаля
Это уже вынужденное решение 😁 а не основанное на мнении большинства, за которым ты и приходил с вопросом :))
Но 👍
источник

AS

Alexey Shumkin in Delphi & Lazarus
Т.е. тебе по прежнему не нравится, но ты вынужден так делать, т.к. иначе не работает :)
Это совсем не то, что и "убедили"
источник

AS

Alexey Shumkin in Delphi & Lazarus
Но по счастью, результат в коде - тот же самый 😁 а это - главное в команде: единообразие (и стандартизация)
источник