чтение макетов с объединенными ячейками

1. eda76 22.07.20 21:29 Сейчас в теме
подскажите, как прочитать текст объединенной ячейки в табличном документе загруженном из Ексель
		КолСтр = ТабДок.ВысотаТаблицы;
		Для Сч = 1 по КолСтр Цикл
			Попытка
				ЗН= Число(ТабДок.Область("R" + Формат(Сч, "ЧГ=0") + "C" + Столбец).Текст);		
			Исключение
				Сообщение = Новый СообщениеПользователю;
				Сообщение.Текст = "Не удалось загрузить строку "+Строка(Сч);
				Сообщение.Сообщить();
			КонецПопытки;
		КонецЦикла;
Показать
Если ячейка одинарная то проблем нет но если попадается вертикально объединенная ячейка то она возвращает ""
нашел вот такой код
	Для Х = Область.Лево ПО Область.Право Цикл 
		Для У = Область.Верх ПО Область.Низ Цикл 
			Сообщить(Область.Текст);
			Х = Х + Область.Право - Область.Лево;
		КонецЦикла;
	КонецЦикла;

но Верх и Низ у этих ячеек равны
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. user856012 13 23.07.20 00:17 Сейчас в теме
(1)
если попадается вертикально объединенная ячейка то она возвращает ""
Я бы попробовал сохранить прочитанный табличный документ в файл, потом открыть его в 1С и посмотреть - какой адрес у объединенной ячейки?

Может, там что-то вроде "R1C1:R3C1" (условно), а вы пытаетесь прочитать "R1C1" - соответственно, получаете пустую строку.
6. eda76 23.07.20 20:04 Сейчас в теме
(4)
так понятно что там R9C1:R12C1 но как узнать, что я нахожусь в объединенной ячейке
есть еще Элементы.ТабДок.ПолучитьВыделенныеОбласти(), но мне надо получить для текущей строки
5. nomad_irk 76 23.07.20 09:53 Сейчас в теме
(1)У объединенных ячеек проверяли значение Область.ВысотаТаблицы?
7. avmartynov 44 03.11.21 12:14 Сейчас в теме
(1) У меня так получилось. Таблица еще один таб док, в которым вывожу значения объединенных ячеек в каждую ячейку.

ТабДок = Новый ТабличныйДокумент;
	ТабДок.Прочитать(ИмяФайла);
	
	НачалоОбъединенияМассив = Новый Массив;
	Для Сч = 0 По Колонки.Количество() Цикл
		НачалоОбъединенияМассив.Добавить(1);
	КонецЦикла;
	
	Для Сч = 1 По ТабДок.ВысотаТаблицы Цикл
	
		Для Колонка = 1 По Колонки.Количество() Цикл
			
			ТекущийТекст = ТабДок.Область(Сч, Колонка, Сч, Колонка).Текст;
			ОбъединенныйТекст = ТабДок.Область(НачалоОбъединенияМассив[Колонка], Колонка, Сч, Колонка).Текст;
			Если ЗначениеЗаполнено(ТекущийТекст) И ТекущийТекст <> ОбъединенныйТекст Тогда
				ТекстЯчейки = ТекущийТекст;
				НачалоОбъединенияМассив[Колонка] = Сч;
			Иначе
				ТекстЯчейки = ОбъединенныйТекст;
			КонецЕсли; 
			Таблица.Область(Сч + 1, Колонка, Сч + 1, Колонка).Текст = ТекстЯчейки;
			
		КонецЦикла; 
	
	КонецЦикла;
Показать
2. vdscom 20 22.07.20 22:47 Сейчас в теме
				зн = ExcelЛист.Cells(стр,кол).Value;
				// разделяем объединенные ячейки и распределяем между ними их числовое содержимое
				Если зн <> Неопределено и ТипЗнч(зн) = Тип("Число") и ExcelЛист.Cells(стр,кол).MergeCells = Истина Тогда
					// количество строк и колонок выделенной области
					квоСтр = ExcelЛист.Cells(стр,кол).MergeArea.Rows.Count;
					квоКол = ExcelЛист.Cells(стр,кол).MergeArea.Columns.Count;
					// количество ячеек выделенной области
					квоЯчеек = квоСтр*квоКол;
					// координаты начальной ячейки области
					начСтр = ExcelЛист.Cells(стр,кол).MergeArea.Row;
                                        начКол = ExcelЛист.Cells(стр,кол).MergeArea.Column;
                                        // координаты конечной ячейки области
                                        конСтр = начСтр+квоСтр-1;
                                        конКол = начКол+квоКол-1;
					// разделяем ячейки
					ExcelЛист.Cells(стр,кол).UnMerge();
					// распределяем между ячейками числовое содержимое
					Для стрМ = 0 по квоСтр-1 Цикл
						Для колМ = 0 по квоКол-1 Цикл
							ячЗн = Окр(зн/квоЯчеек,0);
							ExcelЛист.Cells(начСтр+стрМ,начКол+колМ).Value = ячЗн;
							зн = зн-ячЗн;
							квоЯчеек = квоЯчеек-1;
						КонецЦикла;
					КонецЦикла;
					// заново считываем значение реквизита строки
					зн = ExcelЛист.Cells(стр,кол).Value;
				КонецЕсли;
Показать
3. eda76 22.07.20 23:45 Сейчас в теме
надо в табличном документе, на линуксе OLE не работает
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот