![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
последняя строка Excel
Фуфик © (2009-10-19 10:04:00)Здравствуйте
Подскажите как правильней определить последнею строку Excel, мне нужно пробежаться по циклу до последней строки Excel’я что-то типа while not eof.
Придумал кривоватый вариант, но хотелось бы более оптимальный и правильный.
Для более лучшего понятия моей проблемы привожу весь код
Var
a: String;
XL: variant;
X: Integer;
Begin
XL := CreateOleObject('Excel.Application');
XL.DisplayAlerts := False;
XLS.WorkBooks.Open(‘Ostatki.xls’);
x:= 2;
a:= XLS.Cells[x,4].value;
While a<>'' do // то что пришло в голову
BEGIN
If
ADOTable1.Locate('kod_tovara', XLS.activesheet.Cells[x,1].value, [loCaseInsensitive, loPartialKey])=
True Then
Begin
ADOTable1.Edit;
ADOTable1ostatok.AsInteger:= XLS.Cells[x,5].value;
ADOTable1cena.AsCurrency:= XLS.Cells[x,6].value;
ADOTable1.Post;
x:= x+1;
end else begin
ADOTable1.Insert;
ADOTable1kod_tovara.AsInteger:= XLS.activesheet.Cells[x,1].value;
ADOTable1naimenov.AsString:= XLS.activesheet.Cells[x,4].value;
ADOTable1ostatok.AsInteger:= XLS.activesheet.Cells[x,5].value;
ADOTable1cena.AsCurrency:= XLS.activesheet.Cells[x,6].value;
ADOTable1.Post;
X:= x+1;
end;
a:= XLS.Cells[x,4].value;
END;
sniknik (2009-10-19 16:21:00) [1]> Мы к Микрософту посылали, за изучением DOM?
ну, так я тоже говорил, есть не один путь что то сделать... ;)
Anatoly Podgoretsky (2009-10-19 16:15:00) [2]> sniknik (19.10.2009 16:09:27) [27]
Мы к Микрософту посылали, за изучением DOM?
Так там есть функция поиска последней заполненой строчки, надо сходить и найти как она называется.
sniknik (2009-10-19 16:09:00) [3]> Говоря об оптимальности я имел виду поиск последней (заполненной) строки в Excele
тебе в начале говорили о подключение к книге как к базе, вместо того чтобы спросить, если/что непонятно, ты предпочел спор (ни о чем), т.е. ты на самом деле не хотел оптимального ты хотел чтобы тебя похвалили сказав "молодец, правильно написал, ну может вот тут можно чуть ускорить, но в общем идеал...", извини но это было бы вранье.
вот тебе оптимальное, если бы пошел по тому пути, с подключением
ADODataSet.Last;
готово. ни короче, ни быстрее врядли сделаешь (если конечно имеется ввиду именно последняя в наборе, а не просто одна запись которую можно было бы вернуть запросом, тогда это было бы быстрее но писать больше).
sniknik (2009-10-19 16:01:00) [4]> честь используется
ч асть неиспользуется
sniknik (2009-10-19 16:00:00) [5]и что это доказывает?
тип интеджер это тоже к примеру дофига чисел, а в качестве кодов исключений честь используется... или в любом другом частном случае. а в стпвке тем не менее можно найти - Integer - 2147483648..2147483647
и что?
еще советы, не путай тип и значение, ищи инфу не просто в справке а в нужном разделе.
и потом, ты опять не пытаешься понять, ты пытаешься опровергнуть... (сейчас в ход пойдут заезженные аргументы типа - "в споре рождается истина"... :)
Фуфик (2009-10-19 15:58:00) [6]
> ну так и не говори, что то что ты сделал оптимальнее чего
> то (тем более всего найденного в гугле, где есть куча кода
> от профессионалов)... "как умею" это не оптимально, вот
> когда будешь уметь разными способами, тогда и будет один
> в конкретном случае оптимальнее другого, но даже в этом
> случае не оптимальнее всего гугля.
Говоря об оптимальности я имел виду поиск последней (заполненной) строки в Excele, и несколько небыл задан вопросом об использовании другого кроме ADOTable для доступа к своей базе, вы б и неузнали об этом не привел бы я полный код
> т.е. сначала огрызаешься на очевидное, а после "я новичок"
> помогите мне... ну, ну. а где гарантия, что следующее очевидное
> (совет) ты поймешь и применишь, а не проигнорируешь или
> опять не начнешь огрызаться думая что все непонятое это
> обидные для тебя лично слова?
насчет огрезатся извини если тебе чет не понравилось, а советы за спасибо буду дальше гуглить и
> учится, учится, и еще раз учится
Фуфик (2009-10-19 15:45:00) [7]
> sniknik © (19.10.09 14:20) [18]
Фигня получается
loPartialKey тебе не нравится а loCaseInsensitive ты говоришь в ADO не используется. Так третьего та не дано ведь, может я ошибаюсь но вот по справке нашел что TLocateOption = (loCaseInsensitive, loPartialKey)
sniknik (2009-10-19 15:42:00) [8]> У меня стоит база Access, и причем здесь BDE
читай внимательнее уже написанное и узнаешь.
> я например умею бращаться к базам Access только через ADOTable, ну и я как умею так и сделал
ну так и не говори, что то что ты сделал оптимальнее чего то (тем более всего найденного в гугле, где есть куча кода от профессионалов)... "как умею" это не оптимально, вот когда будешь уметь разными способами, тогда и будет один в конкретном случае оптимальнее другого, но даже в этом случае не оптимальнее всего гугля.
> Ты как мастер может посоветуешь как лучше. Как ни как я ещё новичок в этом
т.е. сначала огрызаешься на очевидное, а после "я новичок" помогите мне... ну, ну. а где гарантия, что следующее очевидное (совет) ты поймешь и применишь, а не проигнорируешь или опять не начнешь огрызаться думая что все непонятое это обидные для тебя лично слова?
ладно, совет - для того чтобы полноценно работать с ADO нужно первым делом удалить с палитры ADOTable, ADOQuery, ADOStoredProc, и учится пользоваться только тем что осталось...
ну вот, я попробовал.
> Ну это я привык использовать в BDE ну и туда тоже вписал.
в BDE с логикой поиска по части кода тоже будет та же проблема. и если у тебя ее не было значит очень везло.
> Понятии не имел для чего они. А что тогда посоветуешь использовать?
учится, учится, и еще раз учится. (другого на банальные вопросы не посоветуешь, ну может еще в хелп заглянуть...). тем более уже объяснил почему, в чем глюк. но похоже непонятое тебе проще проигнорировать чем вникнуть в смысл написаного.
Фуфик (2009-10-19 14:59:00) [9]
> нет, не так, скорее есть компоненты которые предназначены
> и подходят для чего то конкретного, и использовать их совсем
> не по назначению признак ламеризма.
Хорошо я тот саммый ламер который попался на этикомпоненты.
> ADOTable не предназначен для того чтобы писать с его использованием.
> .. он был предназначен (вообще, имхо, это ошибка борланда,
> что они его сделали) для быстрого перевода программ с BDE
> на ADO (идея была, что простой заменой компонент)... те
> времена когда что то так переводили давно прошли, т.что
> теперь это просто признак ламеризма.
У меня стоит база Access, и причем здесь BDE. я например умею бращаться к базам Access только через ADOTable, ну и я как умею так и сделал. Ты как мастер может посоветуешь как лучше. Как ни как я ещё новичок в этом
> кстати это не единственноеIfADOTable1.Locate('kod_tovara',
> XLS.activesheet.Cells[x,1].value, [ loCaseInsensitive, loPartialKey])
> = True Thenклевая конструкция ;)хотя это еще можно списать
> на "экстравагантность письма", т.я. явной ошибки тут нет,
> но вот логику...ищется kod_tovara, и что то делается, и
> при поиске используется loPartialKey, частичное совпадение.
> .. т.е. получается для тебя товары для примера, зеленый
> горошек и виски урожая 1788 года, одно и тоже...в общем
> либо ты не знаешь зачем что такое этот ключ, либо у тебя
> логика хромает... хорошая, но хромает. © Вини Пухи кстати
> loCaseInsensitive в ADO не используется (но тут хоть без
> ошибок в логике, оно просто игнорируется).
Ну это я привык использовать в BDE ну и туда тоже вписал. Понятии не имел для чего они. А что тогда посоветуешь использовать?
> Anatoly Podgoretsky © (19.10.09 14:34) [19]
> поведение тебе пойдет на пользу.
У кого тут агрессивное поведения? Я не сколько не зол ни на кого из вас.
> Anatoly Podgoretsky © (19.10.09 14:40) [20]
> Это достаточно объекная работа и выполнять ее без коммерциализации
> как то не умно. Но пример функци для ламеров, это например
> IncDay но и это им особо не помогает, поскольку Борланд
> не сообразил, что для них нужна еще функция DecDay, без
> нее они впадают в полный ступор. А ты знаешь как сделать
> DecDay без этой функции.
По мне так Оффтоп
Anatoly Podgoretsky (2009-10-19 14:40:00) [10]> sniknik (19.10.2009 14:20:18) [18]
Особенно красиво это для цифровых кодов, наряду с loCaseInsensitive
Anatoly Podgoretsky (2009-10-19 14:34:00) [11]> Фуфик (19.10.2009 13:09:16) [16]
Ты решил, что аггресивное поведение тебе пойдет на пользу.
И определение офтопа говорит о твоей недостаточной квалификации, видимо ты даже не понял о чем речь.
> Хочешь сказать что компоненты Делфи есть специально как для ламеров так и для вырожусь не ламеров?
> Не приведеш полный список этих компонентов
Это достаточно объекная работа и выполнять ее без коммерциализации как то не умно. Но пример функци для ламеров, это например IncDay но и это им особо не помогает, поскольку Борланд не сообразил, что для них нужна еще функция DecDay, без нее они впадают в полный ступор. А ты знаешь как сделать DecDay без этой функции.
sniknik (2009-10-19 14:20:00) [12]кстати это не единственное
If
ADOTable1.Locate('kod_tovara', XLS.activesheet.Cells[x,1].value, [loCaseInsensitive, loPartialKey]) = True
Then
клевая конструкция ;)
хотя это еще можно списать на "экстравагантность письма", т.я. явной ошибки тут нет, но вот логику...
ищется kod_tovara, и что то делается, и при поиске используется loPartialKey, частичное совпадение... т.е. получается для тебя товары для примера, зеленый горошек и виски урожая 1788 года, одно и тоже...
в общем либо ты не знаешь зачем что такое этот ключ, либо у тебя логика хромает... хорошая, но хромает. © Вини Пух
и кстати loCaseInsensitive в ADO не используется (но тут хоть без ошибок в логике, оно просто игнорируется).
sniknik (2009-10-19 13:59:00) [13]> Хочешь сказать что компоненты Делфи есть специально как для ламеров так и для вырожусь не ламеров?
нет, не так, скорее есть компоненты которые предназначены и подходят для чего то конкретного, и использовать их совсем не по назначению признак ламеризма.
ADOTable не предназначен для того чтобы писать с его использованием... он был предназначен (вообще, имхо, это ошибка борланда, что они его сделали) для быстрого перевода программ с BDE на ADO (идея была, что простой заменой компонент)... те времена когда что то так переводили давно прошли, т.что теперь это просто признак ламеризма.
Фуфик (2009-10-19 13:09:00) [14]
> sniknik © (19.10.09 11:16) [8]
> количество переменных здесь совершенно не причем...и вообще,
> само появление ADOTable в коде, это как семафор с с мигающей
> красной надписью "пишет ламер".заявления, что у него что-
> то оптимальней смешны независимо от того правда это или
> нет (даже ламер может написать хорошо. случайно.).
Хочешь сказать что компоненты Делфи есть специально как для ламеров так и для вырожусь не ламеров? Не приведеш полный список этих компонентов
> Anatoly Podgoretsky © (19.10.09 11:28) [9]
> > Подскажите как правильней определить последнею строку
> ExcelА что такое последнея строка Экселя, по крайней мере
> есть три определения и это разные строки.
> Для более лучшего понятия моей проблемы привожу весь код
> Anatoly Podgoretsky © (19.10.09 11:28) [10]
> > Мой зашкалил за 800000 проверять дальше нестал :)Это ты
> зря надо было продолжать дальше.
Оффтоп
> Anatoly Podgoretsky © (19.10.09 11:31) [11]
> > While a<>'' do // то что пришло в головуКстати это уже
> четвертое определение и вряд ли оно тебе подходит.Кстати
> твои вопросы совсем не относятся к Дельфи, это вопросы по
> DOM Экселя, а его производит другой производитель, не Борланд,
> вот у него и надо искать ответ или хотя бы проштудировать
> файл excelXP.pas конечно если ты мазохист.
Спасибо что просветил, следующий раз буду знать.
Anatoly Podgoretsky (2009-10-19 12:17:00) [15]> KilkennyCat (19.10.2009 12:03:14) [14]
Ты спроси его еще о количестве колонок, то вообще в обморок упадешь.
KilkennyCat (2009-10-19 12:03:00) [16]а, понятно. спасибо.
sniknik (2009-10-19 11:59:00) [17]2007 офис.
KilkennyCat (2009-10-19 11:49:00) [18]Извини за оффтоп, но каким это макаром у вас больше чем у меня? 64-х битная версия что ли?
Anatoly Podgoretsky (2009-10-19 11:31:00) [19]
> While a<>'' do // то что пришло в голову
Кстати это уже четвертое определение и вряд ли оно тебе подходит.
Кстати твои вопросы совсем не относятся к Дельфи, это вопросы по DOM Экселя, а его производит другой производитель, не Борланд, вот у него и надо искать ответ или хотя бы проштудировать файл excelXP.pas конечно если ты мазохист.
Anatoly Podgoretsky (2009-10-19 11:28:00) [20]
> Мой зашкалил за 800000 проверять дальше нестал :)
Это ты зря надо было продолжать дальше.