| 
    
        
     
     | 
    
    
  | 
v7: Фильтрация в ексель через AutoFilter по нескольким значениям | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        evgpinsk_    
     25.05.25 
            ✎
    19:31 
 | 
         
        Добрый, перерыл интернет, не нашёл решения.
 
        Хочу из 1с открыть ексель файл, создать автофильтр и далее отфильтровать по Нескольким значениям. Затык в последнем, когда нужен фильтр не по одному значению а по нескольким ExcelApp = СоздатьОбъект("Excel.Application"); ExcelApp.Selection.AutoFilter(1,"45313",1); так работает Вопрос: как во второй переменной указать несколько значений для фильтра? п.с. в самом екселе в макросе решение выглядит так: ActiveSheet.Range("$A$1:$G$1972").AutoFilter Field:=1, Criteria1:=Array("45313", "67950", "84861"), Operator:=xlFilterValues  | 
|||
| 
    1
    
        Kongo2019    
     25.05.25 
            ✎
    20:14 
 | 
         
        (0) На. Выдрал у себя. Напихал коментов по максимуму. Разберешься.
 
        &НаКлиенте
Процедура ФильтроватьЭксельПоНесколькимЗначениям()
    Перем ExcelПриложение, РабочаяКнига, РабочийЛист, ДиапазонДляФильтра;
    // Укажите путь к вашему файлу Excel
    ПутьКФайлу = "C:\Temp\МойФайл.xlsx"; // <--- ИЗМЕНИТЕ НА ВАШ ПУТЬ
    // Укажите столбец для фильтрации (например, 1 для столбца A, 2 для B и т.д.)
    НомерСтолбцаДляФильтра = 1; // <--- ИЗМЕНИТЕ НА НУЖНЫЙ СТОЛБЕЦ
    // Укажите значения для фильтрации
    // Важно: значения должны быть строками, даже если в Excel это числа.
    // Для Excel это массив значений, которые должны быть показаны.
    МассивЗначенийДляФильтра = Новый Массив;
    МассивЗначенийДляФильтра.Добавить("Значение1"); // <--- ЗАМЕНИТЕ НА ВАШИ ЗНАЧЕНИЯ
    МассивЗначенийДляФильтра.Добавить("Значение2");
    МассивЗначенийДляФильтра.Добавить("ЕщеОдноЗначение");
    Попытка
        // Создаем COM-объект Excel
        ExcelПриложение = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка при создании COM-объекта Excel: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    ExcelПриложение.Visible = Истина; // Сделать Excel видимым (можно Истина или Ложь)
    ExcelПриложение.DisplayAlerts = Ложь; // Отключить предупреждения Excel
    Попытка
        // Открываем книгу Excel
        РабочаяКнига = ExcelПриложение.Workbooks.Open(ПутьКФайлу);
    Исключение
        Сообщить("Ошибка при открытии файла Excel: " + ОписаниеОшибки());
        ExcelПриложение.Quit(); // Закрыть Excel, если не удалось открыть книгу
        ExcelПриложение = Неопределено;
        Возврат;
    КонецПопытки;
    Попытка
        // Получаем первый лист (можно указать имя листа: РабочаяКнига.Sheets("ИмяЛиста"))
        РабочийЛист = РабочаяКнига.Worksheets(1);
        РабочийЛист.Activate(); // Активируем лист
        // Определяем используемый диапазон на листе
        // Если данные начинаются не с A1, нужно будет скорректировать
        ДиапазонДляФильтра = РабочийЛист.UsedRange;
        // Сначала проверяем, есть ли уже автофильтр, и если да, снимаем его
        Если РабочийЛист.AutoFilterMode Тогда
            РабочийЛист.AutoFilterMode = Ложь;
        КонецЕсли;
        // Включаем автофильтр для всего используемого диапазона
        ДиапазонДляФильтра.AutoFilter();
        // Фильтруем по заданному столбцу и массиву значений
        // xlFilterValues (константа = 7) используется для фильтрации по списку значений.
        // Operator:=7 означает xlFilterValues
        // Criteria1 должен быть массивом значений, которые нужно ОТОБРАЗИТЬ.
        // Для COM в 1С массив 1С должен быть преобразован в COM-совместимый массив.
        // Это происходит автоматически для простых типов данных.
        ДиапазонДляФильтра.AutoFilter(НомерСтолбцаДляФильтра, МассивЗначенийДляФильтра, 7); // 7 = xlFilterValues
        Сообщить("Автофильтр применен успешно!");
    Исключение
        Сообщить("Ошибка при работе с Excel: " + ОписаниеОшибки());
    КонецПопытки;
    // Важно: не закрывайте ExcelПриложение.Quit() сразу, если хотите, чтобы Excel остался открытым.
    // Если нужно закрыть Excel после выполнения:
    // Если НЕ ExcelПриложение.Visible Тогда // Закрывать только если Excel был невидимым
    // РабочаяКнига.Close(Ложь); // Закрыть книгу без сохранения изменений
    // ExcelПриложение.Quit();
    // КонецЕсли;
    // Освобождаем COM-объекты (рекомендуется, хотя сборщик мусора 1С должен справиться)
    РабочийЛист = Неопределено;
    РабочаяКнига = Неопределено;
    ExcelПриложение = Неопределено;
КонецПроцедуры     | 
|||
| 
    2
    
        evgpinsk_    
     25.05.25 
            ✎
    21:44 
 | 
         
        (1) МассивЗначенийДляФильтра = Новый Массив;
 
        это из 8ки? а что использовать в 7ке в качестве массива? Списокзначение не прошёл  | 
|||
| 
    3
    
        trad    
     25.05.25 
            ✎
    21:58 
 | 
         
        Oleexsup.dll попробуй     
         | 
|||
| 
    4
    
        Kongo2019    
     25.05.25 
            ✎
    22:11 
 | 
         
        (2)Ну да из восьмерки. Так массив и используй, там есть массивы, я те точно говорю.     
         | 
|||
| 
    5
    
        Волшебник    
     25.05.25 
            ✎
    22:39 
 | 
         
        (1) Фу, восьмёрка!     
         | 
|||
| 
    6
    
        Волшебник    
     25.05.25 
            ✎
    22:40 
 | 
         
        (4) Похоже, ты не понял эту жизнь. Ты перешёл на восьмёрку слишком рано...     
         | 
|||
| 
    7
    
        evgpinsk_    
     25.05.25 
            ✎
    22:40 
 | 
         
        (4) в 7ке насколько я понимаю нельзя передать массив значений в качестве переменной     
         | 
|||
| 
    8
    
        Волшебник    
     25.05.25 
            ✎
    22:41 
 | 
         
        (7) ну нельзя и чо?     
         | 
|||
| 
    9
    
        Kongo2019    
     25.05.25 
            ✎
    22:54 
 | 
         
        (7) Ну тода ой, я щас вообще эселеские файлы тока на питоне обрабатываю, тама есть шикарная библиотека openpyxl. Быстро, просто и надежно. В 1С тащу уже готовый результат. 
 
        (6)10 лет на семерке, 12 лет на восьмерке. Надоело спасу нет уже. Надо еще куда удрать. Но платят хорошо. 1С кормит хорошо.  | 
|||
| 
    10
    
        evgpinsk_    
     25.05.25 
            ✎
    22:55 
 | 
         
        (3) глянул в гугле, не понимаю куда копать     
         | 
|||
| 
    11
    
        evgpinsk_    
     26.05.25 
            ✎
    00:27 
 | 
         
        Ладно, пришлось решить по другому. Фильтрую через макрос в книге екселя, значения для фильтра из 1с записываю в файл     
         | 
|||
| 
    12
    
        trad    
     26.05.25 
            ✎
    09:52 
 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |