![]() |
![]() |
![]() |
|
Поиск и замена в Excel из 7.7 | ☑ | ||
---|---|---|---|---|
0
Масянька
07.07.11
✎
11:38
|
День добрый!
Порылась в поиске, ничего не нашла. Прошу помощи. Есть excel-файл. Нужно найти в нем определенные данные и заменить на другие. Лист.Cells.Replace(ЧтоИщем,НаЧтоМеняем). Ругается, что данные отсутствуют. Чувствую, что нужно проверять есть ли данные. Лист.Cells.Find(ЧтоИщем). Ругается - плохой тип переменной. Помогите, кто может. Спасибо. |
|||
1
2S
07.07.11
✎
11:43
|
макросм наше все
|
|||
2
miki
07.07.11
✎
11:45
|
"
Как осуществить поиск / замену значений ячеек на листе //Выбираем область поиска - весь лист ОбластьПоиска = Лист.Cells; // Укажем начало листа НачалоЛиста = Диапазон.Cells(1, 1); // Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска, //укажем откуда искать - с начала листа ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста); // Если нашли, заполняем значением из переменной Значение Если ОбластьПараметр <> неопределено Тогда ОбластьПараметр.Value = Значение; КонецЕсли; Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста. Текст для поиска в этом случае будет выглядеть так: ТекстДляПоиска = "<ИмяДляЗамены>" " http://programna1c.narod.ru/docs/Excel/Excel1C8.html ps. Не проверял |
|||
3
Dimanchik
07.07.11
✎
11:46
|
(0) там поиск через with делается, так что лучше действительно макрос написать и вызвать уже его из обработки
|
|||
4
Масянька
07.07.11
✎
11:51
|
(2) А "неопределено" это что?
|
|||
5
miki
07.07.11
✎
11:56
|
Лентяйка...
Вот через попытку/исключение: " xl=createobject("Excel.Application"); wb=xl.Workbooks.Open(ВыбФайл); ws=wb.worksheets(1);//Первый лист where=ws.columns(1);//Первый столбец what="***";//Строка поиска Попытка r=where.find(what);//Ищем в первом столбце Сообщить(what+" - "+r.offset(0,1).value);//Получаем значение из второго столбца Исключение Сообщить(what+" - не нашли"); КонецПопытки " http://www.itland.ru/forum/index.php?showtopic=6879 |
|||
6
Масянька
07.07.11
✎
11:57
|
(5) Да не лентяйка я. Просто не знаю.
А где этот код писать надо - в 1с? |
|||
7
Масянька
07.07.11
✎
11:58
|
(5) Нашла! Спасибо! Попробую.
|
|||
8
Масянька
07.07.11
✎
16:32
|
Спасибо, получилось.
Продолжаем разговор. В первой колонке - код, во второй - наименование. Одинаковые коды и наименование есть. Но почему-то коды меняет все, а наименование меняет только первое. where.offset(0,1).Value = НовоеНаименование; После r=where.find(what). Почему? |
|||
9
miki
07.07.11
✎
16:40
|
может больше кода покажешь?
|
|||
10
Масянька
07.07.11
✎
16:45
|
Легко
Если КорректируемФайл = 1 Тогда Excel = СоздатьОбъект("Excel.Application"); Книга = Excel.Workbooks.Open(ИмяФайлаКорректировки); Лист = Книга.WorkSheets(1); Колонки = Лист.Columns(1); КонецЕсли; мНовыйКод = 0; Справ = СоздатьОбъект("Справочник.Номенклатура"); Справ.ПорядокКодов(); Справ.ВыбратьЭлементы(0); Пока Справ.ПолучитьЭлемент() = 1 Цикл мТекущийКод = Прав(Справ.Код, 4); Справ.УстановитьНовыйКод(Строка(Формат(мНовыйКод, "Ч(0)8"))); Справ.Записать(); Состояние("Обработана запись справочника с кодом - " + мТекущийКод + ". Новый код - " + Справ.Код + "."); Если КорректируемФайл = 1 Тогда мЧтоИщем = мТекущийКод; мНаЧтоМеняем = Строка(Формат(мНовыйКод + 1, "Ч(0)4")); мНаименование = Справ.Наименование; Сообщить("1 - " + мНаЧтоМеняем); Попытка мПоискКод = Колонки.Find(мТекущийКод); мПоискКод.Replace(мТекущийКод, мНаЧтоМеняем); мПоискКод.OffSet(0,1).Value = мНаименование; Исключение КонецПопытки; КонецЕсли; мНовыйКод = мНовыйКод + 1; КонецЦикла; Если КорректируемФайл = 1 Тогда Книга.Save(); Excel.DisplayAlerts = 0; Excel.Workbooks.Close(); Excel.Quit(); КонецЕсли; Предупреждение("Готово."); КонецПроцедуры // ПростаяПеренумерция |
|||
11
Масянька
07.07.11
✎
16:49
|
Ну и как анализы, доктор?
Поможет кто-нибудь? |
|||
12
miki
07.07.11
✎
17:19
|
Выдели в Excel несколько строк в столбце и введи значение. В каких ячейках будет введенное значение?
|
|||
13
Масянька
07.07.11
✎
17:24
|
Извини, но ты где в Ростове живешь?
|
|||
14
miki
07.07.11
✎
17:26
|
попробуй не задавать поиск по столбцу (Лист.Columns(1);
), а ищи по всему листу + FindNext. (13)Сельмаш. |
|||
15
Масянька
07.07.11
✎
17:28
|
Получилось! :)))))))))))))
В Offset надо так писать: мПоискКод.OffSet(мПоискКод ,0,1).Value = мНаименование; |
|||
16
Масянька
07.07.11
✎
17:29
|
(14) Я училась в Ростове...
|
|||
17
miki
07.07.11
✎
17:32
|
(16)где? на кого?
|
|||
18
Масянька
07.07.11
✎
17:39
|
В ДГТУ. Странный вопрос - на программиста, канешна.
|
|||
19
miki
07.07.11
✎
17:42
|
(18)Я тоже. Странно, но не на программиста :)
|
|||
20
Масянька
07.07.11
✎
17:44
|
(19) Там же?
|
|||
21
miki
07.07.11
✎
17:47
|
Да, на "технологии машиностроения".
|
|||
22
Масянька
07.07.11
✎
17:48
|
Да, тесен мир :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |