Поиск и замена в Excel из 7.7 #558688


#0 by Масянька
День добрый! Порылась в поиске, ничего не нашла. Прошу помощи. Есть excel-файл. Нужно найти в нем определенные данные и заменить на другие. Лист.Cells.Replace(ЧтоИщем,НаЧтоМеняем). Ругается, что данные отсутствуют. Чувствую, что нужно проверять есть ли данные. Лист.Cells.Find(ЧтоИщем). Ругается - плохой тип переменной. Помогите, кто может. Спасибо.
#1 by 2S
макросм наше все
#2 by miki
" Как осуществить поиск / замену значений ячеек на листе //Выбираем область поиска - весь лист ОбластьПоиска = Лист.Cells; // Укажем начало листа НачалоЛиста = Диапазон.Cells(1, 1); // Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска, //укажем откуда искать - с начала листа ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста); // Если нашли, заполняем значением из переменной Значение Если ОбластьПараметр <> неопределено Тогда    ОбластьПараметр.Value = Значение; КонецЕсли; Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста. Текст для поиска в этом случае будет выглядеть так: ТекстДляПоиска = "<ИмяДляЗамены>" " ps. Не проверял
#3 by Dimanchik
там поиск через with делается, так что лучше действительно макрос написать и вызвать уже его из обработки
#4 by Масянька
А "неопределено" это что?
#5 by miki
Лентяйка... Вот через попытку/исключение: " xl=createobject("Excel.Application"); wb=xl.Workbooks.Open(ВыбФайл); ws=wb.worksheets;//Первый лист where=ws.columns;//Первый столбец what="***";//Строка поиска Попытка   r=where.find(what);//Ищем в первом столбце   Сообщить(what+" - "+r.offset(0,1).value);//Получаем значение из второго столбца Исключение   Сообщить(what+" - не нашли"); КонецПопытки "
#6 by Масянька
Да не лентяйка я. Просто не знаю. А где этот код писать надо - в 1с?
#7 by Масянька
Нашла! Спасибо! Попробую.
#8 by Масянька
Спасибо, получилось. Продолжаем разговор. В первой колонке - код, во второй - наименование. Одинаковые коды и наименование есть. Но почему-то коды меняет все, а наименование меняет только первое. where.offset(0,1).Value = НовоеНаименование; После r=where.find(what). Почему?
#9 by miki
может больше кода покажешь?
#10 by Масянька
Легко Если КорректируемФайл = 1 Тогда                    Excel    = СоздатьОбъект("Excel.Application");    Книга    = Excel.Workbooks.Open(ИмяФайлаКорректировки);    Лист    = Книга.WorkSheets;    Колонки = Лист.Columns; КонецЕсли;     мНовыйКод = 0;     Справ = СоздатьОбъект("Справочник.Номенклатура"); Справ.ПорядокКодов; Справ.ВыбратьЭлементы; Пока Справ.ПолучитьЭлемент = 1 Цикл    мТекущийКод = Прав(Справ.Код, 4);            Справ.УстановитьНовыйКод(Строка(Формат(мНовыйКод, "Ч8")));            Справ.Записать;    Состояние("Обработана запись справочника с кодом - " + мТекущийКод + ". Новый код - " + Справ.Код + ".");            Если КорректируемФайл = 1 Тогда            мЧтоИщем    = мТекущийКод;        мНаЧтоМеняем    = Строка(Формат(мНовыйКод + 1, "Ч4"));        мНаименование    = Справ.Наименование; Сообщить("1 - " + мНаЧтоМеняем);                    Попытка            мПоискКод = Колонки.Find(мТекущийКод);            мПоискКод.Replace(мТекущийКод, мНаЧтоМеняем);            мПоискКод.OffSet(0,1).Value = мНаименование;            Исключение            КонецПопытки;            КонецЕсли;                мНовыйКод        = мНовыйКод + 1;                                            КонецЦикла;        Если КорректируемФайл = 1 Тогда                                             Книга.Save;        Excel.DisplayAlerts = 0;        Excel.Workbooks.Close;        Excel.Quit;    КонецЕсли;            Предупреждение("Готово.");     КонецПроцедуры    // ПростаяПеренумерция
#11 by Масянька
Ну и как анализы, доктор? Поможет кто-нибудь?
#12 by miki
Выдели в Excel несколько строк в столбце и введи значение. В каких ячейках будет введенное значение?
#13 by Масянька
Извини, но ты где в Ростове живешь?
#14 by miki
попробуй не задавать поиск по столбцу (Лист.Columns; ), а ищи по всему листу + FindNext. Сельмаш.
#15 by Масянька
Получилось! :))))))))))))) В Offset надо так писать: мПоискКод.OffSet(мПоискКод ,0,1).Value = мНаименование;
#16 by Масянька
Я училась в Ростове...
#17 by miki
где? на кого?
#18 by Масянька
В ДГТУ. Странный вопрос - на программиста, канешна.
#19 by miki
Я тоже. Странно, но не на программиста :)
#20 by Масянька
Там же?
#21 by miki
Да, на "технологии машиностроения".
#22 by Масянька
Да, тесен мир :)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С