Имя: Пароль:
1C
 
Как из 1С найти в каталоге в файле екселя ячейку (все) содержащие значение?
0 RomaH
 
naïve
06.10.15
09:31
Исходные данные только имя папки в которой есть вложенные папки содержащей множество файлов екселя.
и значение которое надо найти в этих файлах.

нужно получить адреса ячеек содержащие искомое значение.
подскажите куда копать?
1 RomaH
 
naïve
06.10.15
11:46
ФайлыДанных = НайтиФайлы(КаталогПоиска,"*.xls*",Истина);
    
    Для Каждого ФайлДанных Из ФайлыДанных Цикл
        
        ФайлОбъект = ФайлДанных.ПолноеИмя;
        
        Попытка
            Док = Книги.Open(ФайлДанных.ПолноеИмя);
        Исключение
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
            Продолжить;
        КонецПопытки;
        
        Для каждого РабочийЛист Из Док.WorkSheets Цикл
            
            ИскомаяИнформация = Формат(Объект.ДатаРождения,"ДФ=dd.MM.yyyy");
        
            НайденнаяЯчейка = РабочийЛист.UsedRange.find(ИскомаяИнформация);
            
            Если НайденнаяЯчейка = Неопределено Тогда
                Продолжить;
            КонецЕсли;
            
            ПерваяНайденная = НайденнаяЯчейка.Row;
            Ф = РабочийЛист.Cells(2, 256);


почему пишет, что Cells() / Rows() / Range() - нет такого метода?
хотя вроде раньше всегда ячейку читал как
ТекЛист.Range(
2 adrond
 
06.10.15
12:26
Проверь сам файл xls. Такое бывает, если на листе есть графики
3 RomaH
 
naïve
06.10.15
12:31
(2) не - права на СОМ не до конца применились - перезагрузил сервер - заработало
4 RomaH
 
naïve
06.10.15
12:31
а как открыть найденную ячейку?
5 RomaH
 
naïve
06.10.15
13:13
в общем получилось вот так

Функция НачатьПоискНаСервере(Знач ДатаРождения, Знач Фамилия) Экспорт
    
    Результат = Новый Структура("ЗначениеНайдено,МассивАдресов",Ложь,Новый Массив);
    
    Попытка
        Ексель = Новый COMОбъект("Excel.Application");  //ПолучитьCOMОбъект()
        Книги = Ексель.Workbooks;
        Ексель.DisplayAlerts = Ложь;
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
        Ексель = Неопределено;
        Возврат Результат;
    КонецПопытки;
    
    КаталогПоиска = "\\Пенсионеры";

    ФайлыДанных = НайтиФайлы(КаталогПоиска,"*.xls*",Истина);
    
    Для Каждого ФайлДанных Из ФайлыДанных Цикл
        
        ФайлОбъект = ФайлДанных.ПолноеИмя;
        
        Попытка
            Док = Книги.Open(ФайлДанных.ПолноеИмя);
        Исключение
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
            Продолжить;
        КонецПопытки;
        
        Для каждого РабочийЛист Из Док.WorkSheets Цикл
            
            МассивПодходящихСтрок = Новый Массив;
            
            ИскомаяИнформация = Формат(ДатаРождения,"ДФ=dd.MM.yyyy");
        
            НайденнаяЯчейка = РабочийЛист.UsedRange.find(ИскомаяИнформация);
            
            Если НайденнаяЯчейка = Неопределено Тогда
                Продолжить;
            КонецЕсли;
            
            ПерваяНайденная = НайденнаяЯчейка.Row;
            
            МассивПодходящихСтрок.Добавить(НайденнаяЯчейка.Row);
            
            //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ФайлДанных.ПолноеИмя + Символы.ПС + НайденнаяЯчейка.Address);
            
            Пока Истина Цикл
                
                НайденнаяЯчейка = РабочийЛист.UsedRange.findNext(НайденнаяЯчейка);
                
                Если НайденнаяЯчейка = Неопределено ИЛИ ПерваяНайденная = НайденнаяЯчейка.Row Тогда
                    Прервать;
                КонецЕсли;
                
                МассивПодходящихСтрок.Добавить(НайденнаяЯчейка.Row);

                //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ФайлДанных.ПолноеИмя + Символы.ПС + НайденнаяЯчейка.Address);
                
            КонецЦикла;
            
            Для Каждого ПодходящаяСтроки Из МассивПодходящихСтрок Цикл
                
                ОбластьПоиска = РабочийЛист.Rows(ПодходящаяСтроки);
                
                НайденнаяЯчейка = ОбластьПоиска.find(Фамилия);
            
                Если НайденнаяЯчейка = Неопределено Тогда
                    Продолжить;
                КонецЕсли;            
                
                //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ФайлДанных.ПолноеИмя + Символы.ПС + НайденнаяЯчейка.Address);
                
                Результат.ЗначениеНайдено = Истина;
                
                СтруктураАдреса = Новый Структура("ИмяФайла,ИмяЛиста,АдресЯчейки",ФайлДанных.ПолноеИмя,РабочийЛист.Name,НайденнаяЯчейка.Address);
                
                Результат.МассивАдресов.Добавить(СтруктураАдреса);
                
            КонецЦикла;

        КонецЦикла;
        
        Док.Close();
        
    КонецЦикла;
    
    Ексель.Quit();
    
    Возврат Результат;
    
КонецФункции
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс