|
Загрузка из Excel только отфильтрованных значений | ☑ | ||
---|---|---|---|---|
0
FeeL86
19.06.12
✎
11:38
|
Добрый день.
Помогите разобраться. Есть файл excel 2007 в нем настроен фильтр по колонке. Не могу понять как получить именно те данные которые отфильтровал excel. Пока что пришлось перебирать все строки и отлавливать нужные с помощью условия. Пример кода: Excel = Новый COMОбъект("Excel.Application"); xlLastCell = 11; Результат = 0; Попытка Excel.WorkBooks.Open(ПутьКФайлу); ExcelЛист = Excel.Sheets(1); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell); RowCount = ActiveCell.Row; ColumnCount = ActiveCell.Column; Для Row = 2 По RowCount-1 Цикл Для Column = 1 По ColumnCount-4 Цикл Если Column = 1 Тогда //Это код сотрудника ТабНомерСотрудника = СокрЛП(ExcelЛист.Cells(Row,Column).Text); Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоКоду(ТабНомерСотрудника); ИначеЕсли Column = 3 Тогда //Это результат начисления Результат = ?(ExcelЛист.Cells(Row,Column).Text = "", 0, Число(ExcelЛист.Cells(Row,Column).Text)); КонецЕсли; КонецЦикла; Если Результат > 0 Тогда НоваяСтрока = Начисления.Добавить(); НоваяСтрока.ТабельныйНомер = Сотрудник.Код; НоваяСтрока.Сотрудник = Сотрудник; НоваяСтрока.ПодразделениеОрганизации = Сотрудник.ПодразделениеОрганизации; НоваяСтрока.Результат = Результат; КонецЕсли; КонецЦикла; ФормаПрогресБар.Закрыть(); Excel.WorkBooks.Close(); Excel = 0; |
|||
1
DrShad
19.06.12
✎
11:42
|
считать всю область через COMSafeAray в ТЗ и наложить через запрос отборы из фильтра
|
|||
2
smaharbA
19.06.12
✎
11:44
|
через оле получаем значение фильтра - это и будет массив отфильтрованных значений
|
|||
3
FeeL86
19.06.12
✎
11:52
|
DrShad, есть метод который позволяет выгрузить в тз всю область? Или в цикле заливать все записи в тз?
|
|||
4
FeeL86
19.06.12
✎
11:57
|
smaharbA через OLE и запросом RecordSet-у можно сделать выборку. Но меня интересует как через ком объект Excel.Application можно обойти циклом результат фильтрации Excel`а
|
|||
5
smaharbA
19.06.12
✎
11:59
|
(4) в (2) все написано
|
|||
6
smaharbA
19.06.12
✎
12:01
|
(3) для восьмерки элементарно про всю область
Область=Лист.UsedRange; Массив=Область.Value; |
|||
7
smaharbA
19.06.12
✎
12:39
|
автор с автофильром еще (2) и (6) не сообразил ?
если это автофильтр Автофильтр=Лист.AutoFilter; Область=Лист.Range; Отфильтрованные=Область.SpecialCells(12); Массив=Отфильтрованные.Value; с фильтрами и прочим скрытием точно так же |
|||
8
FeeL86
19.06.12
✎
12:52
|
Вариант с автофильтром (6) не возвращает данных
|
|||
9
smaharbA
19.06.12
✎
12:54
|
(8) да ну на
|
|||
10
FeeL86
19.06.12
✎
12:59
|
Если делаю Лист.UsedRange.Value получаю массив всей области.
Если Лист.AutoFilter.Range.SpecialCells(12).Value то возвращает массив с названиями колонок |
|||
11
Jaap Vduul
19.06.12
✎
13:00
|
(8) В (6) не автофильтр, в (7) исправился
|
|||
12
Jaap Vduul
19.06.12
✎
13:06
|
(10)SpecialCells и не нужен, просто AutoFilter.Range.Value
В справке к VBA так и написано: Use the AutoFilter property to return the AutoFilter object. Use the Filters property to return a collection of individual column filters. Use the Range property to return the Range object that represents the entire filtered range |
|||
13
FeeL86
19.06.12
✎
13:11
|
Хорошо делаю Лист.AutoFilter.Range.Value и получаю аналогичный результат если бы написал Лист.UsedRange.Value
|
|||
14
smaharbA
19.06.12
✎
13:15
|
Автофильтр=Лист.AutoFilter;
Область=Лист.Range; Отфильтрованные=Область.SpecialCells(12); Области=Отфильтрованные.Areas; Массив=Новый Массив; Для Каждого Область Из Области Массив.Добавить(Область.Value); КонецЦикла; как то так, не адинеснег и тем боле восьмерку не знаю |
|||
15
smaharbA
19.06.12
✎
13:16
|
(12) нужен, иначе получишь всю область неофильтрованную
|
|||
16
FeeL86
19.06.12
✎
13:22
|
я уж понял что без SpecialCells(12) т.к. число 12 = xlVisible т.е те области которые видим
|
|||
17
Jaap Vduul
19.06.12
✎
13:27
|
Тогда вот так:
Лист.AutoFilter.Range.Offset(1).Resize(Лист.AutoFilter.Range.Rows.Count-1).SpecialCells(12).Value |
|||
18
smaharbA
19.06.12
✎
13:38
|
в (14) наверняка рабочий код, но вытянет и заголовок автофильтра
ибо универсально для областей со скрытыми любым способом ячеейками - будь то фильтр, автофильтр, ручное скрытие, группировки и т.д. |
|||
19
FeeL86
19.06.12
✎
14:25
|
Спасибо всем за помощь, разобрался
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |