Имя: Пароль:
1C
 
Как обойти через COM, только отфильтрованные строки в файле эксель?
,
0 VID1234
 
13.12.22
13:28
Здравствуйте. Есть файл эксель, в нем около 25000 строк, его с разной периодичностью нужно прочитывать и и выбирать только данные видимых (отфильтрованных) строк, а остальные игнорить. Как это можно сделать?
ДиалогОткрытияФайла                         = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    //ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Текст = "ru = ""Текст""; en = ""Text""";
    ДиалогОткрытияФайла.МножественныйВыбор         = Ложь;
    ДиалогОткрытияФайла.Заголовок                 = "Выберите файл для загрузки";
    ДиалогОткрытияФайла.Фильтр                    = "Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|";
    
    ИмяФайла                                     = "";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ИмяФайла                                 = ДиалогОткрытияФайла.ПолноеИмяФайла;
    Иначе
        Текст                                     = "ru = ""Файл(ы) не выбран!""; en = ""File(s) not selected!""";
        Предупреждение(НСтр(Текст));
        Возврат;
    КонецЕсли;
    
    Попытка
        Excel                                    = Новый COMОбъект("Excel.Application");
        Excel.DisplayAlerts                     = 0;
    Исключение      
        Предупреждение("MS Excel не загружен!");
        Возврат;
    КонецПопытки;
    
    Попытка
        Книга                                     = Excel.Workbooks.Open(СокрЛП(ИмяФайла));  
    Исключение
        Excel.Quit();  
        //Предупреждение("Не удалось открыть файл!"+ ТекФайл);
        Предупреждение("Не удалось открыть файл!"+ ИмяФайла);
        Возврат;
    КонецПопытки;
    
    Попытка
        ЭксельЛист                                 = Книга.Sheets("Лист1");
    Исключение
        Сообщить("Не найдена страница Лист1");
        ЗакрытьExcel(Книга, Excel);
        Возврат;
    КонецПопытки;    
Прочитал, про автофильтр, но не могу понять как его нужно применять. Подскажите пожалуйста!
1 DES
 
13.12.22
13:59
Можно считать значение фильтра
      OldFilter = .AutoFilter.Filters.Item(1).Criteria1   'считываем текущее состояние фильтра  
     и в 1с фильтровать уже читая подряд
2 lodger
 
13.12.22
14:00
а занафига ты притащил сюда целую портянку кода Открывашки excel?

AutoFilter надо вызывать у выделенной области.
3 lodger
 
13.12.22
14:00
(2) в результат AutoFilter ты получишь область "поменьше". точнее рваную фильтром.
4 VID1234
 
13.12.22
14:03
(3) Здравствуйте. Стопор, поэтому и скинул, вот я получил   ЭксельЛист, а что с ним дальше делать?
5 lodger
 
13.12.22
14:04
(4) а дальше определить откуда до куда там таблица
взять таблицу как область.
у области вызвать .AutoFilter();
наслаждаться.
6 VID1234
 
13.12.22
14:05
(1) Здравствуйте. Не совсем понял, Вы говорите считать подряд, т.е. мне придется все равно перебрать все 25 000 строк? И что должно быть перед точкой?   Я получил ЭксельЛист
7 VID1234
 
13.12.22
14:06
(5) а, т.е. мне нужно определить область через range?
8 VID1234
 
13.12.22
14:15
ВсегоКолонок = ЭксельЛист.Cells(1,1).SpecialCells(7).Column;
ВсегоСтрок = ЭксельЛист.Cells(1,1).SpecialCells(7).Row;

Так не стартует, исключительная ситуация не найдено ни одной ячейки....
9 mistеr
 
13.12.22
14:39
А не проще попросить пользователя скопировать отфильтрованные строки в новый файл?
Ну или макрос ему сделать.
10 VID1234
 
13.12.22
14:41
(9) Здравствуйте. Ну Вы же знаете пользователей, да и самому интересно. Область я получил, теперь только нужно понять как на эту область наложить фильтр
11 Asmody
 
13.12.22
14:50
Есть у меня обработка загрузки из Excel, она читает штатно табдоком файлик xslx (без всяких COM), разбирает по листам, выводит нужный лист на форму, потом через СКД грузит в ТЗ, ну и дальше по базе.
Звонит пользователь: мол, в Excel 20 строк, а грузится 300! Я то-сё, не может быть такого. Говорю: "Показывай как делаешь". Смотрю - реально в Excel 20 строк, в табдоке на форме 20 строк. А в ТЗ - 300! Перетыкал всё, СКД проверил 10 раз, погонял на тестах...
А пользователь прошаренный! И умеет фильтрами в Excel пользоваться. Короче, у него здоровая таблица, он поставил фильтр и прям с фильтром грузит в 1Ску. 1Ска умная - она скрытые строки загружает так же скрытыми! И в табдоке на форме их тоже не видно. А СКД пофиг скрытые они или нет, она данные читает. Полдня убил, чтобы это поймать.
Если что, Табдок.Область(стр,,стр).Видимость смотреть надо
12 Kassern
 
13.12.22
14:52
(11) забавно, не обращал на это внимание)