Имя: Пароль:
1C
1C 7.7
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с записываю в файл