Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

последняя строка Excel


Страницы:   1 2

Фуфик ©   (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 проверять дальше нестал :)

Это ты зря надо было продолжать дальше.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо