|   |   | 
| 
 | Загрузка из 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() Тогда Нет! | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |