Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2014, 14:32   #1
karpov007
Новичок
Джуниор
 
Регистрация: 06.01.2014
Сообщений: 3
По умолчанию C++Builder фильтр по значению в Excel

Добрый день.
Программа открывает Excel, считывает определенную строку.
Затем нужно произвести поиск данной строки в определенном столбце другого файла эксель.
Впринципе через цикл for(i=0;i<56566;i++), считывание каждой i-ой строки в string1 и сравнение adr1 = string1.Pos(stringsrav); все работает.
Проблема в том что этим способом очень долго.

Как сделать, чтобы сначала накладывался фильтр на этот столбец по наличию там значения stringsrav?


Заранее спасибо за ответы
karpov007 вне форума Ответить с цитированием
Старый 06.01.2014, 16:37   #2
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Надо просто индекс строки найти? Можно сначала считать весь столбец из экселевского файла, типа
Код:
Variant V = xlSheet.OlePropertyGet( "Range", "A1:A56566" ).OlePropertyGet( "Value" );
Потом найти в этом массивчике нужную строку, запомнив индекс для дальнейших манипуляций
Код:
for( int i = 1; i <= 56566; i++ )
{
  AnsiString string1 = V.GetElement( 1, i );
  if( string1.Pos( stringsrav ) )
  {
    // i - искомый индекс 
  }
}
FataLL вне форума Ответить с цитированием
Старый 07.01.2014, 13:57   #3
karpov007
Новичок
Джуниор
 
Регистрация: 06.01.2014
Сообщений: 3
По умолчанию

FataLL спасибо.
Но все равно долго получается..я с количеством строк ошибся, нолик пропустил 565606.
Вообщем сделал макрос на VBA который удовлетворяет моим условиям.
Код:
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    Columns("A:K").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets( _
        "Лист1").Range("A1:K2"), CopyToRange:=Columns("L:V"), Unique:=False

End Sub
Теперь вопрос как его запустить из билдера..
Сразу при открытие файла эксель не вариант ибо он ссылается на данные относительно которых будет проводится сортировка, а их надо начала внести(вносятся программо в эксель автоматически).
karpov007 вне форума Ответить с цитированием
Старый 08.01.2014, 21:19   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Есть такое дело, как OleProcedure...
FataLL вне форума Ответить с цитированием
Старый 09.01.2014, 04:38   #5
karpov007
Новичок
Джуниор
 
Регистрация: 06.01.2014
Сообщений: 3
По умолчанию

Спасибо, запустил.
Код:
 app.OleProcedure("Run","Macro4") ;
Но проблема в том что при запуске эксель выдает "Имя не может совпадать со встроенным фильтром _FilterDatabase"
Если переименовать в xls, то все работает.
Проблема в том что при переименовании режется количество строк.
В самом файле такого названия как "_FilterDatabase" по понятным причинам нет.
В диспечере имен excel - "Имена с ошибками" тоже пусто
Что делать?
karpov007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фильтр-сортировка excel 2003 Sharrik Microsoft Office Excel 2 25.07.2013 09:13
Фильтр с combobox в excel VinDiz Помощь студентам 0 25.12.2012 20:59
Макрос для Excel: выбор строк по наименьшему значению. Maikroft Фриланс 4 06.03.2012 00:50
Фильтр по дате Otlook из Excel Rojohn Microsoft Office Excel 0 05.10.2010 13:24
Фильтр в Access как в Excel Flangini Microsoft Office Access 5 05.03.2010 08:11