Имя: Пароль:
1C
1С v8
Неверно считывается количество строк в Excel
0 миша122062
 
05.05.12
14:24
Читаю количество сток на странице
КолСтрок = НашФайл.Sheets.Item(ИмяЛиста).UsedRange.Rows.Count();

Выдает 5 - а строк то 6!!!!!
Кто в теме - что за шняга?
1 Жан Пердежон
 
05.05.12
14:27
ошибся значит
2 dka80
 
05.05.12
14:37
а в самом экселе vba сколько выдает?
3 миша122062
 
05.05.12
14:37
(1)нет! в файле 6 строк! Проверено!
4 aleks-id
 
05.05.12
14:38
да прибудут с вами корявые руки ибо читать таким макаром уже не модно
5 миша122062
 
05.05.12
14:38
(4)а как - просвятите о новых направлениях!
6 Alex S D
 
05.05.12
14:40
методом эвристического анализа надо..
7 миша122062
 
05.05.12
14:44
кто может без флуда реально сказать как определить точно количество строк в файле
8 КМ155
 
05.05.12
14:45
(7) могут многие, но тебе помощь не светит
9 Irek-kazan
 
05.05.12
14:46
вариант 1 - посчитать кол-во непустых строк в цикле
10 Irek-kazan
 
05.05.12
14:47
и уверен что тот на том листе читаешь?
11 Boroda
 
05.05.12
14:48
В начале листа есть совершенно пустые строки?
12 Boroda
 
05.05.12
14:50
для  сч=1 по 99999

если счПодрядПпустыхСтрок>10 Тогда Прервать;
13 Alex S D
 
05.05.12
14:51
я не заморачиваюсь вообще, юзер вводит загрузить строки с .. и по.. че мудрить
14 Irek-kazan
 
05.05.12
14:52
(13) можно вообще не грузить, пусть распечатывает и ручками забивает
15 Alex S D
 
05.05.12
14:53
(14) в моем случае иначе никак, формат файлов для загрузки сумашедший
16 Irek-kazan
 
05.05.12
14:54
давайте напрягем мозг, хоть это и сложно, и спросим ТС зачем ему кол-во строк?
17 Irek-kazan
 
05.05.12
14:55
iRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
18 Alex S D
 
05.05.12
14:55
пусть сам скажет, напрягаться еще..
19 миша122062
 
05.05.12
14:57
(8)ты просто долбак, как в нашем городе говорят.  И твои посты подтверждают - нифига не умеешь крому флуда.
20 Eugene_life
 
05.05.12
14:58
(19) Если в книге будет объединение ячеек - твой метод ошибется 100%. Надежнее всего - перебирать по строкам, и останавливаться когда пошли пустые
21 миша122062
 
05.05.12
14:58
(16)загрузка данных из файла произвольного формата
22 Alex S D
 
05.05.12
14:58
(20) ну я сразу предлагал - (6)
23 миша122062
 
05.05.12
14:58
(20)да уже думал об этом
24 Alex S D
 
05.05.12
14:59
(20) окей.. гденить в середине пустая строка.. че делать будем?
25 Irek-kazan
 
05.05.12
15:01
(24) цикл от 1 до 65536
26 Alex S D
 
05.05.12
15:02
(25) каждый раз читать 65 тыщ строк? а ты знаешь что там может и лям строк быть?
27 Irek-kazan
 
05.05.12
15:02
(26) это была шутка :)
28 миша122062
 
05.05.12
15:05
Решил так. Кому может интересно - в инете нарыл
Лист = НашФайл.Sheets.Item(ИмяЛиста);
КолСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
29 Irek-kazan
 
05.05.12
15:05
ActiveCell.SpecialCells(xlLastCell).Row
30 Alex S D
 
05.05.12
15:06
(28) на счет этого метода пишут:

КолС=Лист.UsedRange.SpecialCells(11).Row;
Действительно не надежно! Пример: таблица из 8 строк, но если кто-нибудь из юзверей просто ткнется на любую ячейку скажем в 300 строке, то количество строк опять будет 65 тык с гаком.
По своему опыту согласен с Херрес "Единственный надёжный способ - бежать по ячейкам и эмпирически искать пустое место", правда ющу не пустое место определунный символ или набор в первой ячейке последненей строки.
31 Irek-kazan
 
05.05.12
15:08
Данный метод не требует указания номера столбца и возвращает максимальную последнюю ячейку(строку — Row либо столбец — Column). Но используя данный метод следует помнить, что не всегда можно получить реальную последнюю заполненную ячейку. Если Вы где-то ниже занесете данные и сразу удалите их из таблицы, а затем примените такой метод, то lLastRow будет равна значению строки, из которой Вы только что удалили значения. Другими словами требует обязательного обновления данных, а этого можно добиться только сохранив и закрыв документ и открыв его снова. Так же, если какая-либо ячейка содержит форматирование(например, заливку), но не содержит никаких значений, то она тоже будет засчитана.
32 миша122062
 
05.05.12
15:10
(30)протестил на 8 зашоренных-косячных файлах Экселя. Работает так:
КолСтрок1 = НашФайл.Sheets.Item(ИмяЛиста).UsedRange.Rows.Count();// Количество строк
КолСтрок2 = Лист.Cells(1,1).SpecialCells(11).Row;// Количество строк - вариант 2
КолСтрок =  Макс(КолСтрок1, КолСтрок2);// Берем тот что больше
33 Eugene_life
 
05.05.12
15:11
(24) Я обычно читаю в ТЗ, потому если попалась пустая строка - то продолжаю считывать.. Если 10 подряд пустых строк - то значит конец данных. Пустые строки из ТЗ удаляю.
34 миша122062
 
05.05.12
15:12
(33) тоже вариант - мучительно выбираю между ним и (32)
35 Eugene_life
 
05.05.12
15:14
(34) Ты смотри по возможным последствиям. Самое страшное - если кто-то в строке 64001 поставит крестик. Что тогда будет? Если анализ того, что загрузилось?
36 Alex S D
 
05.05.12
15:15
(32) спс, учту)
37 Irek-kazan
 
05.05.12
15:23
(35) пересохранить в csv
38 МихаилМ
 
05.05.12
15:35
39 Alex S D
 
05.05.12
15:37
(38) тут собственно все уже обсуждали