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