|
Загрузка из excel | ☑ | ||
---|---|---|---|---|
0
kofeinik
10.04.15
✎
11:37
|
Гружу таблицу из excel, случайно обнаружилась проблема.
При загрузке файлов со включенным автофильтром не грузятся некоторые строки. Вопрос: как программно определить, что в файле активен автофильтр? |
|||
1
fisher
10.04.15
✎
11:38
|
(0) Думаю, дело не совсем в этом. Через ADO грузишь?
|
|||
2
kofeinik
10.04.15
✎
11:53
|
ExcelПриложение = Новый COMОбъект("Excel.Application");
Ex = ExcelПриложение.WorkBooks.Open(ИмяФайла); ЛистЭксел = Ex.Sheets(1); ВсегоСтрок = ЛистЭксел.Cells.SpecialCells(11).Row; Для Счетчик = НомерПервойСтрокиТаблицы По ВсегоСтрок Цикл НоменклатураНаименование = ЛистЭксел.Range("B"+Формат(Счетчик,"ЧГ=0")).Value; и т.д. |
|||
3
Масянька
10.04.15
✎
11:56
|
(2) А что такое SpecialCells?
|
|||
4
fisher
10.04.15
✎
11:58
|
А, не. Если через аппликэйшн, тогда не то что я подумал.
|
|||
5
RomaH
naïve
10.04.15
✎
12:01
|
ВсегоСтрок = ЛистЭксел.Cells.SpecialCells(11).Row;
Для Счетчик = НомерПервойСтрокиТаблицы По ВсегоСтрок Цикл это уже не модно |
|||
6
kofeinik
10.04.15
✎
12:01
|
(4) там явно видно, гружу без фильтра - все ок.
включаю автофильтр, даже вообще без отборов - получаю в загруженном документе меньше строк, притом, что цикл простейший. Причем пропускает строки по непонятному принципу, совсем не по фильтру. |
|||
7
Kurbash
10.04.15
✎
12:02
|
Ексель = Новый COMОбъект("Excel.Application") ;
ФайлЕксель = Ексель.Workbooks.Open(ПутьКФайлу); Для н = НомерСтрокиНачало По НомерСтрокиКонец Цикл сокрлп(Ексель.Sheets(Лист).Cells(н,1).Value);///переменная конеццикла; Ексель.Application.Quit(); абсолютно рабочий код |
|||
8
Kurbash
10.04.15
✎
12:02
|
Точнее вот так:
Ексель = Новый COMОбъект("Excel.Application") ; ФайлЕксель = Ексель.Workbooks.Open(ПутьКФайлу); Для н = НомерСтрокиНачало По НомерСтрокиКонец Цикл нн=сокрлп(Ексель.Sheets(Лист).Cells(н,1).Value);///переменная конеццикла; Ексель.Application.Quit(); |
|||
9
RomaH
naïve
10.04.15
✎
12:03
|
МассивДанных = РабочийЛист.UsedRange.Value.Выгрузить();
этот метод тоже фильтр включает? |
|||
10
RomaH
naïve
10.04.15
✎
12:05
|
(6) чудес не бывает
либо ЛистЭксел.Cells.SpecialCells(11).Row; возвращает меньше чем надо либо у вас счетчик перескакивает выведи счетчик на посмотреть - пропуски естьт? |
|||
11
RomaH
naïve
10.04.15
✎
12:06
|
хотя если без фильтра ок - то счетчик не причем
что значит "пропускает строки"? |
|||
12
Kurbash
10.04.15
✎
12:09
|
а не кажется что автофильтр тут не причем? Он сделан для пользователей, при работе учитываются все строки,иначе не было бы гемороя со скрытыми строками и столбцами(из собственного опыта)
|
|||
13
Масянька
10.04.15
✎
12:15
|
(6) Из собственного опыта: Excel должен быть закрыт, файлы - закрыты. Какая необходимость держать файл открытым?
|
|||
14
Масянька
10.04.15
✎
12:16
|
+(13) Да еще и с фильтрацией.
|
|||
15
фобка
10.04.15
✎
12:16
|
Sheet.ShowAllData()
|
|||
16
фобка
10.04.15
✎
12:19
|
(2) specialcells невсегда подходит. Беги в цикле по строкам и проверяй заполнена ячейка в определенной колонке или нет
|
|||
17
фобка
10.04.15
✎
12:21
|
Пока не ПустаяСтрока(лист.cells(н, 1).text) Цикл
|
|||
18
kofeinik
10.04.15
✎
12:25
|
Сделал пустой цикл перебора строк с выводом счетчика, с фильтром 170 строк, без фильтра - 180. Попутно нашел нужное:
Если ЛистЭксел.AutoFilterMode() Тогда Нет! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |