И опять Excel 2016. Индекс находится за границами массива

1. ShuSU 63 22.10.20 15:10 Сейчас в теме
Есть обработка стороннего автора для Розницы. Таблицы где колонка равна ячейки все хорошо загружается.
Я вот пример.xls выдает ошибку:
{ВнешняяОбработка.1111.Форма.Форма.Форма(180)}: Индекс находится за границами массива

Как я понял проблема в том что в таблице примера строки объединение.
Excel = Новый COMОбъект("Excel.Application");
	Excel.Application.Workbooks.Open(ИмяФайлаНаСервере);
	Excel.DisplayAlerts = 0;
	ExcelSheet = Excel.Sheets(1);
	ВсегоСтрок = ExcelSheet.Cells.SpecialCells(11).Row;
	ВсегоКолонок = ExcelSheet.Cells.SpecialCells(11).Column;
	ExcelSheetRange = ExcelSheet.Range(ExcelSheet.Cells(НачСтрока, 1), ExcelSheet.Cells(КонСтрока, ВсегоКолонок));
	Данные = ExcelSheetRange.Value.Выгрузить();
	Попытка
//Остановка начинается с первой прочинанной колонки
		Артикулы 		= ?(кАртикул <= 0, Неопределено, Данные[кАртикул - 1]);;
		Наименования 	= ?(кНаименование <= 0, Неопределено, Данные[кНаименование - 1]);
		ШтрихКод 		= ?(кШтрихКод <= 0, Неопределено, Данные[кШтрихКод - 1]);
		Единицы		 	= ?(кЕдИзмерения <= 0, Неопределено, Данные[кЕдИзмерения - 1]);
		СтавкиНДС	 	= ?(кСтавкаНДС <= 0, Неопределено, Данные[кСтавкаНДС - 1]);
		Количества 		= ?(кКоличество <= 0, Неопределено, Данные[кКоличество - 1]);
		Цены 			= ?(кЦена <= 0, Неопределено, Данные[кЦена - 1]);
		Сумма 			= ?(кСумма <= 0, Неопределено, Данные[кСумма - 1]);
	Исключение
		Сообщить(ОписаниеОшибки());
		Данные = Неопределено;
	КонецПопытки; 
	Объект.ДанныеЗагрузки.Очистить();
	Для Сч = 0 По КонСтрока - НачСтрока Цикл //- 1 Цикл
		Если Данные = Неопределено Тогда
			Прервать;
		КонецЕсли; 	
		СтрокаТЧ = Новый Структура("Артикул, Наименование, ШтрихКод, ЕдиницаИзФайла, СтавкаНДСИзФайла, Количество, Цена, Сумма"); 
		СтрокаТЧ.Артикул 				= ?(Артикулы = Неопределено, "", СокрЛП(Артикулы[Сч]));
		СтрокаТЧ.Наименование 			= ?(Наименования = Неопределено, "", СокрЛП(Наименования[Сч]));
		СтрокаТЧ.ШтрихКод 				= ?(ШтрихКод = Неопределено, "", СокрЛП(ШтрихКод[Сч]));
		СтрокаТЧ.ЕдиницаИзФайла 		= ?(Единицы = Неопределено, "", СокрЛП(Единицы[Сч]));
		СтрокаТЧ.СтавкаНДСИзФайла 		= ?(СтавкиНДС = Неопределено, "", СокрЛП(СтавкиНДС[Сч]));
		СтрокаТЧ.Количество 			= ?(Количества = Неопределено, "", ЧисткаСтроки(Количества[Сч]));
		СтрокаТЧ.Цена 					= ?(Цены = Неопределено, "", Цены[Сч]);
		СтрокаТЧ.Сумма 					= ?(Сумма = Неопределено, "", Сумма[Сч]);
		Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Артикул) И НЕ ЗначениеЗаполнено(СтрокаТЧ.Наименование) Тогда
			Продолжить;
		КонецЕсли; 
		СтрокаЗагрузки = Объект.ДанныеЗагрузки.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаЗагрузки, СтрокаТЧ);
	КонецЦикла; 
	Данные = Неопределено;
	ExcelSheetRange = Неопределено;
	ВсегоСтрок = Неопределено;
	ExcelSheet = Неопределено;
	Excel.Application.Workbooks(1).Close();
	Excel.Quit();
	Excel = Неопределено;
Показать


Вопрос: как заставить код проглатывать данные с объединённых ячеек ексельки. За ранее спасибо.
Прикрепленные файлы:
пример.xls
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FatPanzer 22.10.20 15:21 Сейчас в теме
1. Не использовать объединенные ячейки. Получится универсальное решение.
2. Если шаблон фиксированный - зная номера колонок объединенных ячеек использовать именно их, безо всякого цикла. Универсальности не получится, получится индивидуальное решение.
3. ShuSU 63 22.10.20 15:30 Сейчас в теме
(2)
ъединенные ячейки. Получится универсальное решение

Я и делаю фиксацию по ИНН. что бы оператор выбрал Контрагента, и все значения колонок проставились автоматом.
Но с данным поставщиком не могу заставить выгружать. номера колонок ставлю с первой колонки объединённой ячейки и не идет.
Постоянно править ексельку перед выгрузкой не вариант, ни кто этого не будет делать. вот и надо именно этот шаблон документа читабельным
4. uno-c 264 22.10.20 18:53 Сейчас в теме
Можно не выгружать, а работать напрямую с ячейками листа экселя.
5. uno-c 264 22.10.20 20:03 Сейчас в теме +0.3 $m
В Вашем случае поможет и такое:
ВсегоКолонок = ExcelSheet.Cells.SpecialCells(11).Column +  ExcelSheet.Cells.SpecialCells(11).Columns.Count - 1;
6. ShuSU 63 23.10.20 00:57 Сейчас в теме
Оставьте свое сообщение

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