Имя: Пароль:
IT
 
Поиск и замена в 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
Да, тесен мир :)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.