Форум: "Начинающим";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];
Внизпоследняя строка 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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.006 c