![]() |
|
v7: Фильтрация в ексель через AutoFilter по нескольким значениям Djelf, evgpinsk_, Злопчинский, Kongo2019, Бертыш, Волшебник, Builder, sdf, trad, s_trikozin, Олдж, trdm, dedmoroz777, Greeen
| ☑ | ||
---|---|---|---|---|
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с записываю в файл
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |