8.х Поиск соседней ячейки в excel

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем kisol, 4 апр 2015.

  1. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    387
    Симпатии:
    41
    Баллы:
    54
    Код:
    &НаСервере
    Процедура ЗаполнениеСправочника()
          
            COMОбъект = ПолучитьCOMОбъект(ПутьКФайлу);
          
            ЕКСЕЛЬНомерАнкеты = COMОбъект.Sheets(1).Cells(5,2).Value;
            ЕКСЕЛЬФамилия = COMОбъект.Sheets(1).Cells(7,2).Value;
            ЕКСЕЛЬИмя = COMОбъект.Sheets(1).Cells(9,2).Value;
            ЕКСЕЛЬОтчество = COMОбъект.Sheets(1).Cells(10,2).Value;
          
            СправочникОбъект = Справочники.Соотечественники.СоздатьЭлемент();
            СправочникОбъект.ДатаПоступления = ДатаПоступления;
            СправочникОбъект.НоменАнкеты     = ЕКСЕЛЬНомерАнкеты;
            СправочникОбъект.Фамилия         = ЕКСЕЛЬФамилия;
            СправочникОбъект.Имя             = ЕКСЕЛЬИмя;
            СправочникОбъект.Отчество         = ЕКСЕЛЬОтчество;  
            СправочникОбъект.Наименование     = СправочникОбъект.Фамилия + " "   
            + СправочникОбъект.Имя  + " " + СправочникОбъект.Отчество;
          
            СправочникОбъект.Записать();
        
      
    КонецПроцедуры
    
    Есть вот такой код, при открытии xls копируем фиксированные ячейки в справочник.

    Но как скопировать ячейки которые постоянно в разных местах, можно их найти только поиском(по названию соседней ячейки, всегда такое название)

    Вложения:

  2. Flash-Dance
    Offline

    Flash-Dance Профессионал в 1С

    Регистрация:
    20 май 2012
    Сообщения:
    365
    Симпатии:
    42
    Баллы:
    54
    Можно циклом обходить весь лист для поиска нужной ячейки:
    Столбец последней непустой ячейки: COMОбъект.Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Column
    Строка последней непустой ячейки: COMОбъект.Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row
    kisol нравится это.
  3. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    387
    Симпатии:
    41
    Баллы:
    54
    Не понятно как осуществить поиск нужной мне ячейки и сохранить нужную мне ячейку?
  4. Flash-Dance
    Offline

    Flash-Dance Профессионал в 1С

    Регистрация:
    20 май 2012
    Сообщения:
    365
    Симпатии:
    42
    Баллы:
    54
    Алгоритм примерно такой. Но для полной картины нужен более подробный пример. Скриншота только одного значения записи недостаточно.
    Код:
         // Начинаем обходить лист.  сперва запускаем цикл для обхода строк, внутри него цикл для обхода столбцов.
    Для Строка  = 1 по COMОбъект.Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row Цикл
    Длая Столбец  = 1 По COMОбъект.Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Column Цикл
         // Если нам попалась соседняя ячейка
    Если COMОбъект.Sheets(1).Cells(Строка, Столбец).Value = НазваниеСоседнейЯчейки Тогда
         //Определенные действия по заимствованию значения из COMОбъект.Sheets(1).Cells( --вычисляемые координаты искомой ячейки по координатам соседней ячейки и значениям смещения--).Value
    КонецЕсли
    КонецЦикла
    КонецЦикла
    
  5. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    387
    Симпатии:
    41
    Баллы:
    54
    Прикладываю обработку и два файла примера, у Иванова все хорошо загружается в справочник, потому что ячейки стоят на месте и в коде жестко прописано что копировать, а вот петров уже не работает.

    Вложения:

    • Соот.zip
      Размер файла:
      17,4 КБ
      Просмотров:
      1
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А зачем у ячеек есть метов find можете посмотреть много примеров есть на VBA и на 1С, вот один из них

    Код:
    Процедура Сформировать()
    
    ОкноExcel = СоздатьОбъект("Excel.Application");
    
    РабКнига = ОкноExcel.Application.Workbooks.Open("cКнига1.xls");
    
    Лист = РабКнига.WorkSheets(1);
    
    Попытка
    
    tmp = Лист.Range(Лист.Cells(1,10),Лист.Cells(1,40)).Find ("аааа");
    
    Сообщить(tmp.Value);
    
    Исключение
    
    Сообщить("Не найдено");
    
    КонецПопытки;
    
    КонецПроцедуры
    kisol нравится это.
  7. TopicStarter Overlay
    kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    387
    Симпатии:
    41
    Баллы:
    54
    Подключаюсь к ексель, ищу ячейку, смешаюсь относительно ячейки вниз и вправо, хочу скопировать текст внутри. Но печаль ЕКСЕЛЬДатаРождения пустая. Прикладываю скриншот с положеним ячейки.

    ЯчейкаЕКСЕЛЬДатаРождения = Лист.Find("4. Число, месяц, год рождения",РабочийЛист.Range("A1"));

    ЕКСЕЛЬДатаРождения = ЯчейкаЕКСЕЛЬДатаРождения.Offset(1,1).value;


    [​IMG]

    РЕШЕНИЕ грубое:
    ЕКСЕЛЬДатаРожденияВремен = ЯчейкаЕКСЕЛЬДатаРождения.Offset(1,0);
    ЕКСЕЛЬДатаРождения = ЕКСЕЛЬДатаРожденияВремен.offset(0,1).value;
    Последнее редактирование: 2 авг 2015
  8. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    403
    Симпатии:
    71
    Баллы:
    54
    Здравствуйте.
    Можно обойти все ячейки строки и выбрать только те, в которых что-то есть. Вот так, например:
    Код:
    Попытка
    COMОбъект = Новый COMОбъект("Excel.Application");
    COMОбъект.WorkBooks.Open(ПутьКФайлу);
    ExcelЛист = COMОбъект.Sheets(1);
    Исключение
    Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
    КонецПопытки;
    
    xlLastCell = 11;
    ActiveCell = COMОбъект.ActiveCell.SpecialCells(xlLastCell);
    RowCount = ActiveCell.Row;
    ColumnCount = ActiveCell.Column;
    Для Row = 1 По RowCount Цикл
    Для Column = 1 По ColumnCount Цикл
    Попытка
    Если СокрЛП(ExcelЛист.Cells(Row,Column).Value) = "" Тогда
    Продолжить;
    Иначе
    Сообщить(СокрЛП(ExcelЛист.Cells(Row,Column).Value));
    КонецЕсли;
    Исключение
    Сообщить(ROW);
    КонецПопытки;
    КонецЦикла;
    КонецЦикла;
    
    COMОбъект.WorkBooks.Close();
    COMОбъект = 0;
    
    Последнее редактирование: 5 авг 2015

Поделиться этой страницей