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