Имя: Пароль:
1C
1С v8
Работа с excel: как при программном обходе найти сдвоенные (объединенные) ячейки?
0 breezee
 
11.12.15
20:23
1) Нашел код для прохождения по всем строкам и колонкам. Почему количество строк и колонок поределяется для 1 строки и колонки? может где-то ошибка?
Лист = Книга.WorkSheets(1);  

    ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
    ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;      

    Для Строка = 1 По ВсегоСтрок Цикл  

        Для Колонка = 1 По ВсегоКолонок Цикл
            Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
        КонецЦикла;      

    КонецЦикла;
И почему там стоит(11)?
2) Можно ли как-то при обходе строки в екселе найти сдовенные(объединенные) колонки?
1 Джинн
 
11.12.15
20:28
SpecialCells(11) - это последняя ячейка. Соответственно последняя ячейка в строке и последняя ячейка в колонке.
2 breezee
 
11.12.15
20:29
(1) Ок. Спасибо. А на счет 2 вопроса?
3 Джинн
 
11.12.15
20:48
(2) Понятия не имею. Подозреваю что перебором с MergeArea. Но зуб не дам - макросом когда-то делал на VBA. Из 1С не пробовал.
4 Vladal
 
11.12.15
21:12
На одном форуме я увидел похожую тему. Не проверял, нет возможности.
Источник: http://www.programmersforum.ru/showthread.php?t=38489

Существует ли способ работы с объединенными ячейками, при котором для обращения к соседней ячейки изменять координаты x,y нужно так же на единицу?
Реализовать такой способ можно, но возникнут проблемы с вычислением координат, если на листе будет много объединённых ячеек, каждая из которых содержит в себе ячейки нескольких строк и столбцов, - в этом случае при одних и тех же координатах (к примеру, MyCells(5,12)) будут возвращаться разные ячейки в зависимости от того, с чего начинаем подсчёт - со строк, или со столбцов.

Проще пойти другим путём.

Вы, скорее всего, для перебора ячеек используете что-то вроде этого:
Код:

Sub ОбработкаОбычныхЯчеек()
    For x = 1 To 30
        Cells(x, 1) = "Это ячейка " & x
    Next
End Sub

Sub ОбработкаОбычныхЯчеек_вариант2()
    x = 1
    While x <= 30
        Cells(x, 1) = "Это ячейка " & x
        x = x + 1
    Wend
End Sub


Попробуйте использовать такой вариант:
Код:

Sub ОбработкаОбъединённыхЯчеек()
    x = 1: i = 1
    While x <= 30
        Cells(x, 1) = "Это ячейка " & i: i = i + 1
        x = x + Cells(x, 1).MergeArea.Cells.Count
    Wend
End Sub
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн