Имя: Пароль:
1C
1С v8
Загрузка из 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() Тогда Нет!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс