Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.06;
Скачать: CL | DM;

Вниз

последняя строка Excel   Найти похожие ветки 

 
Фуфик   (2009-10-19 10:04) [0]

Здравствуйте
Подскажите как правильней определить последнею строку 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;


 
RWolf ©   (2009-10-19 10:07) [1]

можно подключиться к экселевской таблице, как к источнику данных, через то же ADO; тогда, под идее, можно обходиться пресловутым Eof.


 
KilkennyCat ©   (2009-10-19 10:09) [2]

последняя строка в листе Excel имеет номер 65536


 
Рамиль ©   (2009-10-19 10:18) [3]


> KilkennyCat ©   (19.10.09 10:09) [2]

Это смотря какой Excel


 
McSimm ©   (2009-10-19 10:18) [4]


> KilkennyCat ©   (19.10.09 10:09) [2]
>
> последняя строка в листе Excel имеет номер 65536

не обязательно, у меня это 1048576


 
Фуфик   (2009-10-19 10:35) [5]

По гуглив нашел, вошем мой вариант намного оптимальней


> KilkennyCat ©   (19.10.09 10:09) [2]
> последняя строка в листе Excel имеет номер 65536


Мой зашкалил за 800000 проверять дальше нестал :)

Спасибо за внимание. Код лучше оставлю как есть.


 
sniknik ©   (2009-10-19 10:41) [6]

> мой вариант намного оптимальней
не смеши людей ADOTable в принципе не может быть оптимальней... с ADODataSet-ом, это как напишешь.


 
Фуфик   (2009-10-19 10:49) [7]


> не смеши людей ADOTable в принципе не может быть оптимальней.
> .. с ADODataSet-ом, это как напишешь.


Согласен стобой быть может в другом случае такое. В моем случае используются всего две переменные a и XL
И мне они нужны лишь при нажатии одной кнопки обновить, и раде этого закидывать на ыорму ещё один компонент мне кажется лишним


 
sniknik ©   (2009-10-19 11:16) [8]

количество переменных здесь совершенно не причем...

и вообще, само появление ADOTable в коде, это как семафор с с мигающей красной надписью "пишет ламер".
заявления, что у него что-то оптимальней смешны независимо от того правда это или нет (даже ламер может написать хорошо. случайно.).


 
Anatoly Podgoretsky ©   (2009-10-19 11:28) [9]


> Подскажите как правильней определить последнею строку Excel

А что такое последнея строка Экселя, по крайней мере есть три определения и это разные строки.


 
Anatoly Podgoretsky ©   (2009-10-19 11:28) [10]


> Мой зашкалил за 800000 проверять дальше нестал :)

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


 
Anatoly Podgoretsky ©   (2009-10-19 11:31) [11]


> While a<>"" do   // то что пришло в голову

Кстати это уже четвертое определение и вряд ли оно тебе подходит.
Кстати твои вопросы совсем не относятся к Дельфи, это вопросы по DOM Экселя, а его производит другой производитель, не Борланд, вот у него и надо искать ответ или хотя бы проштудировать файл excelXP.pas конечно если ты мазохист.


 
KilkennyCat ©   (2009-10-19 11:49) [12]

Извини за оффтоп, но каким это макаром у вас больше чем у меня? 64-х битная версия что ли?


 
sniknik ©   (2009-10-19 11:59) [13]

2007 офис.


 
KilkennyCat ©   (2009-10-19 12:03) [14]

а, понятно. спасибо.


 
Anatoly Podgoretsky ©   (2009-10-19 12:17) [15]

> KilkennyCat  (19.10.2009 12:03:14)  [14]

Ты спроси его еще о количестве колонок, то вообще в обморок упадешь.


 
Фуфик   (2009-10-19 13:09) [16]


> 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 конечно если ты мазохист.

Спасибо что просветил, следующий раз буду знать.


 
sniknik ©   (2009-10-19 13:59) [17]

> Хочешь сказать что компоненты Делфи есть специально как для ламеров так и для вырожусь не ламеров?
нет, не так, скорее есть компоненты которые предназначены и подходят для чего то конкретного, и использовать их совсем не по назначению признак ламеризма.

ADOTable не предназначен для того чтобы писать с его использованием... он был предназначен (вообще, имхо, это ошибка борланда, что они его сделали) для быстрого перевода программ с BDE на ADO (идея была, что простой заменой компонент)... те времена когда что то так переводили давно прошли, т.что теперь это просто признак ламеризма.


 
sniknik ©   (2009-10-19 14:20) [18]

кстати это не единственное
If
ADOTable1.Locate("kod_tovara", XLS.activesheet.Cells[x,1].value, [loCaseInsensitive, loPartialKey]) = True  
Then

клевая конструкция ;)
хотя это еще можно списать на "экстравагантность письма", т.я. явной ошибки тут нет, но вот логику...
ищется kod_tovara, и что то делается, и при поиске используется loPartialKey, частичное совпадение... т.е. получается для тебя товары для примера, зеленый горошек и виски урожая 1788 года, одно и тоже...
в общем либо ты не знаешь зачем что такое этот ключ, либо у тебя логика хромает... хорошая, но хромает. © Вини Пух

и кстати loCaseInsensitive в ADO не используется (но тут хоть без ошибок в логике, оно просто игнорируется).


 
Anatoly Podgoretsky ©   (2009-10-19 14:34) [19]

> Фуфик  (19.10.2009 13:09:16)  [16]

Ты решил, что аггресивное поведение тебе пойдет на пользу.
И определение офтопа говорит о твоей недостаточной квалификации, видимо ты даже не понял о чем речь.

> Хочешь сказать что компоненты Делфи есть специально как для ламеров так и для вырожусь не ламеров?
> Не приведеш полный список этих компонентов

Это достаточно объекная работа и выполнять ее без коммерциализации как то не умно. Но пример функци для ламеров, это например IncDay но и это им особо не помогает, поскольку Борланд не сообразил, что для них нужна еще функция DecDay, без нее они впадают в полный ступор. А ты знаешь как сделать DecDay без этой функции.


 
Anatoly Podgoretsky ©   (2009-10-19 14:40) [20]

> sniknik  (19.10.2009 14:20:18)  [18]

Особенно красиво это для цифровых кодов, наряду с loCaseInsensitive


 
Фуфик   (2009-10-19 14:59) [21]


> нет, не так, скорее есть компоненты которые предназначены
> и подходят для чего то конкретного, и использовать их совсем
> не по назначению признак ламеризма.

Хорошо я тот саммый ламер который попался на этикомпоненты.


> 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 без этой функции.

По мне так Оффтоп


 
sniknik ©   (2009-10-19 15:42) [22]

> У меня стоит база Access, и причем здесь BDE
читай внимательнее уже написанное и узнаешь.

> я например умею бращаться к базам Access только через ADOTable, ну и я как умею так и сделал
ну так и не говори, что то что ты сделал оптимальнее чего то (тем более всего найденного в гугле, где есть куча кода от профессионалов)... "как умею" это не оптимально, вот когда будешь уметь разными способами, тогда и будет один в конкретном случае оптимальнее другого, но даже в этом случае не оптимальнее всего гугля.

> Ты как мастер может посоветуешь как лучше. Как ни как я ещё новичок в этом
т.е. сначала огрызаешься на очевидное, а после "я новичок" помогите мне... ну, ну. а где гарантия, что следующее очевидное (совет) ты поймешь и применишь, а не проигнорируешь или опять не начнешь огрызаться думая что все непонятое это обидные для тебя лично слова?
ладно, совет - для того чтобы полноценно работать с ADO нужно первым делом удалить с палитры ADOTable, ADOQuery, ADOStoredProc, и учится пользоваться только тем что осталось...
ну вот, я попробовал.

> Ну это я привык использовать в BDE ну и туда тоже вписал.
в BDE с логикой поиска по части кода тоже будет та же проблема. и если у тебя ее не было значит очень везло.

> Понятии не имел для чего они. А что тогда посоветуешь использовать?
учится, учится, и еще раз учится. (другого на банальные вопросы не посоветуешь, ну может еще в хелп заглянуть...). тем более уже объяснил почему, в чем глюк. но похоже непонятое тебе проще проигнорировать чем вникнуть в смысл написаного.


 
Фуфик   (2009-10-19 15:45) [23]


> sniknik ©   (19.10.09 14:20) [18]


Фигня получается
loPartialKey тебе не нравится а loCaseInsensitive ты говоришь в  ADO не используется. Так третьего та не дано ведь, может я ошибаюсь но вот по справке нашел что TLocateOption = (loCaseInsensitive, loPartialKey)


 
Фуфик   (2009-10-19 15:58) [24]


> ну так и не говори, что то что ты сделал оптимальнее чего
> то (тем более всего найденного в гугле, где есть куча кода
> от профессионалов)... "как умею" это не оптимально, вот
> когда будешь уметь разными способами, тогда и будет один
> в конкретном случае оптимальнее другого, но даже в этом
> случае не оптимальнее всего гугля.

Говоря об оптимальности я имел виду поиск последней (заполненной) строки в Excele, и несколько небыл задан вопросом об использовании другого кроме ADOTable для доступа к своей базе, вы б и неузнали об этом не привел бы я полный код


> т.е. сначала огрызаешься на очевидное, а после "я новичок"
> помогите мне... ну, ну. а где гарантия, что следующее очевидное
> (совет) ты поймешь и применишь, а не проигнорируешь или
> опять не начнешь огрызаться думая что все непонятое это
> обидные для тебя лично слова?


насчет огрезатся извини если тебе чет не понравилось, а советы за спасибо буду дальше гуглить и
> учится, учится, и еще раз учится


 
sniknik ©   (2009-10-19 16:00) [25]

и что это доказывает?
тип интеджер это тоже к примеру дофига чисел, а в качестве кодов исключений честь используется... или в любом другом частном случае. а  в стпвке тем не менее можно найти - Integer - 2147483648..2147483647
и что?

еще советы, не путай тип и значение, ищи инфу не просто в справке а в нужном разделе.

и потом, ты опять не пытаешься понять, ты пытаешься опровергнуть... (сейчас в ход пойдут заезженные аргументы типа - "в споре рождается истина"... :)


 
sniknik ©   (2009-10-19 16:01) [26]

> честь используется
часть не используется


 
sniknik ©   (2009-10-19 16:09) [27]

> Говоря об оптимальности я имел виду поиск последней (заполненной) строки в Excele
тебе в начале говорили о подключение к книге как к базе,  вместо того чтобы спросить, если/что непонятно, ты предпочел спор (ни о чем), т.е. ты на самом деле не хотел оптимального ты хотел чтобы тебя похвалили сказав "молодец, правильно написал, ну может вот тут можно чуть ускорить, но в общем идеал...", извини но это было бы вранье.
вот тебе оптимальное, если бы пошел по тому пути, с подключением
ADODataSet.Last;
готово. ни короче, ни быстрее врядли сделаешь (если конечно имеется ввиду именно последняя в наборе, а не просто одна запись которую можно было бы вернуть запросом, тогда это было бы быстрее но писать больше).


 
Anatoly Podgoretsky ©   (2009-10-19 16:15) [28]

> sniknik  (19.10.2009 16:09:27)  [27]

Мы к Микрософту посылали, за изучением DOM?
Так там есть функция поиска последней заполненой строчки, надо сходить и найти как она называется.


 
sniknik ©   (2009-10-19 16:21) [29]

> Мы к Микрософту посылали, за изучением DOM?
ну, так я тоже говорил, есть не один путь что то сделать... ;)



Страницы: 1 вся ветка

Текущий архив: 2009.12.06;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.008 c
2-1255524674
madmech@yandex.ru
2009-10-14 16:51
2009.12.06
Как убрать скроллбар у DBGrid


3-1231075733
Oleg_teacher
2009-01-04 16:28
2009.12.06
Clientdatase + рисунок


1-1227707159
DmitriyG
2008-11-26 16:45
2009.12.06
На этапе компиляции определить подключен или нет модуль


15-1254894885
MBo
2009-10-07 09:54
2009.12.06
Срединедельная задачка


2-1256051065
vadk
2009-10-20 19:04
2009.12.06
ошибка после инсталяции 6-й!