Size: a a a

2021 January 22

O

Oleg in Delphi & Lazarus
Alexey Shumkin
Есть вариант проще и красивей, и правильнее:
Получить сразу значения всего массива ячеек... (При применении того же OLE, хотя ещё быстрее было бы использовать чтение напрямую файла посредством какой-нибудь либы, для того предназначенной.
Пример через OLE могу привести позже, ща не за компом
Да, там нужно обращаться к Range, брать сразу много строк/колонок, но не очень много. Блоками тысяч по десять строк - условно нормально. То есть идея про Rows.Count опасна.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Oleg
Да, там нужно обращаться к Range, брать сразу много строк/колонок, но не очень много. Блоками тысяч по десять строк - условно нормально. То есть идея про Rows.Count опасна.
она не "опасна" )) она просто имеет ограничения )))
источник

O

Oleg in Delphi & Lazarus
Alexey Shumkin
она не "опасна" )) она просто имеет ограничения )))
Согласен. Я намекаю на то, что нужно проверять. Если вдруг Rows.Count=1000000, то Range("A1:BZ1000000") может ничего страшного из себя не представлять, а может и уложить 32-битное приложение на лопатки.
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Oleg
Согласен. Я намекаю на то, что нужно проверять. Если вдруг Rows.Count=1000000, то Range("A1:BZ1000000") может ничего страшного из себя не представлять, а может и уложить 32-битное приложение на лопатки.
Не обратили внимание что UsedRange.Rows.Count? ) Откуда тысячи-мильоны?
источник

JM

Jane Mix in Delphi & Lazarus
Катерина Свиридова
T_2 массив чего? Может не так поняла)
Просто массив куда записываются значегия из второй таблицы таблицы
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Jane Mix
Просто массив куда записываются значегия из второй таблицы таблицы
Вы в элементы массива записываете ранг, а не значение ячейки
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Alexey Shumkin
Тут есть один "нюанс"/ограничение - получение значения ОДНОЙ ячейки...
Если надо получить значения всей таблицы (ну, какого-то диапазона ячеек) , это будет ооооооооооооочень медленно..
Оочень медленно - это сколько? Когда в Excel пишешь, то бывает медленно из-за всяких форматирований, автосайзов.. то да. Поди приходит экспорт чего-нибудь, которое нужно закачать ) Важно для чего делается, вот тогда о скорости можно говорить
источник

JM

Jane Mix in Delphi & Lazarus
Этих строк на данный момент 129, количество значений должно изменяться, но пока этого хватает
источник

O

Oleg in Delphi & Lazarus
Катерина Свиридова
Не обратили внимание что UsedRange.Rows.Count? ) Откуда тысячи-мильоны?
Из опыта. Из реальных данных, которые могут быть. У автора нет контроля величины Rows.Count, следовательно, миллион строк может быть неожиданностью.
источник

O

Oleg in Delphi & Lazarus
Лично работал с выгрузками под миллион строк (логи из розницы). Понимаю, о чём говорю.
источник

AN

Axl "Мямявр&quo... in Delphi & Lazarus
Jane Mix
Народ, подскажите, как более адекватно можно из exel документа выдергивать данные в делфи?
Открыть его как базу данных, имхо.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Катерина Свиридова
Оочень медленно - это сколько? Когда в Excel пишешь, то бывает медленно из-за всяких форматирований, автосайзов.. то да. Поди приходит экспорт чего-нибудь, которое нужно закачать ) Важно для чего делается, вот тогда о скорости можно говорить
вот честно, мне некогда и лень делать доказательный тест для демонстрации опытному человеку, чтобы показать очевидные вещи типа, что 10/100/1000/100500 вызовов через OLE Excel по одному условному слову данных - это медленнее, чем один вызов с условными 10/100/1000/100500 словами данных ))
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Oleg
Лично работал с выгрузками под миллион строк (логи из розницы). Понимаю, о чём говорю.
Верю ) Но Mix учащийся скорее всего, непонятно даже как он массив делает
источник

JM

Jane Mix 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..]?
а то что есть столбцы AA?)
источник

JM

Jane Mix in Delphi & Lazarus
я бы скинул весь код, но честно мне неловко)
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Jane Mix
а то что есть столбцы AA?)
Вы задачу начальную напишите. А то будто в испорченном телефоне половина слов пропадает в обе стороны
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Можно прямо мне. А то у меня WorkBanch вдруг заглючил на decimal, полмозга там
источник

O

Oleg in Delphi & Lazarus
Jane Mix
а то что есть столбцы AA?)
Там у Катерины адресация через номера колонок идёт, а не через символьные обозначения колонок. Это адресация в стиле ссылок R1C1, погуглите на всякий случай, что это такое, если ещё не в курсе.
источник

КС

Катерина Свиридова... in Delphi & Lazarus
Капец. Гляжу в книгу и вместо ":" вижу ";" Извините за грязный офтоп
источник

AN

Axl "Мямявр&quo... in Delphi & Lazarus
Продолжу мысль про БД. Когда-то давно делал через ADO, примерно так (плюс-минус):

const
 connStr = 'Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\MyFile.xlsx;Mode=Share Deny None;Extended Properties="Excel 12.0 Xml;HDR=No";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False';
...

var
 connFile: TADOConnection;
 qryFileSelect: TADOQuery;
 FTableList: TStringList;
...

connFile.ConnectionString := connStr;
connFile.Open;
connFile.GetTableNames(FTableList);
qryFileSelect.SQL.Text := Format('select * from [%s]', [FTableList[0]]);
qryFileSelect.Open();
источник