COMSafeArray заполняет эксель одним значением
Делаю загрузку массивов в Эксель. Вот код:
//Получаем массив, которыми нужно заполнить данные
МассивДанных = ПолучитьМассивИзТаблицыДанных(Стр.ДанныеСтолбца);
//Создаем COMSafeArray на основании массива
МассивCOM = Новый COMSafeArray(МассивДанных,"VT_VARIANT");//, МассивДанных.Количество());
//Загружаем созданный COMSafeArray в выбранную область данных
ЛистПрайс.Range(ЛистПрайс.Cells(СтрокаНачалаДанных,Стр.НомерКолонки),ЛистПрайс.Cells(СтрокаНачалаДанных+МассивДанных.Количество()-1,Стр.НомерКолонки)).Value = МассивCOM;
После присвоения ЛистПрайс.Range(****).Value = МассивCOM в массив ЛистПрайс.Range(****).Value становится первое значение МассивCOM во всех 5 тысячах строк. Пробовал менять типы VT_VARIANT, не помогает.
скрин 1 - Данные МассивCOM
скрин 2 - данные ЛистПрайс.Range(****).Value до заливки в него МассивCOM
скрин 3 - данные ЛистПрайс.Range(****).Value после заливки
//Получаем массив, которыми нужно заполнить данные
МассивДанных = ПолучитьМассивИзТаблицыДанных(Стр.ДанныеСтолбца);
//Создаем COMSafeArray на основании массива
МассивCOM = Новый COMSafeArray(МассивДанных,"VT_VARIANT");//, МассивДанных.Количество());
//Загружаем созданный COMSafeArray в выбранную область данных
ЛистПрайс.Range(ЛистПрайс.Cells(СтрокаНачалаДанных,Стр.НомерКолонки),ЛистПрайс.Cells(СтрокаНачалаДанных+МассивДанных.Количество()-1,Стр.НомерКолонки)).Value = МассивCOM;
После присвоения ЛистПрайс.Range(****).Value = МассивCOM в массив ЛистПрайс.Range(****).Value становится первое значение МассивCOM во всех 5 тысячах строк. Пробовал менять типы VT_VARIANT, не помогает.
скрин 1 - Данные МассивCOM
скрин 2 - данные ЛистПрайс.Range(****).Value до заливки в него МассивCOM
скрин 3 - данные ЛистПрайс.Range(****).Value после заливки
Прикрепленные файлы:



Найденные решения
Как оказалось дело было в том, что массив необходимо транспонировать, чтобы заполнить область данных экселя по вертикали
МассивДанных = ПолучитьМассивИзТаблицыДанных(Стр.ДанныеСтолбца);
//Тут добавляем новый массив и первым элементом вставляем полученный ранее массив
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(МассивДанных);
МассивCOM = Новый COMSafeArray(МассивСтрок,"VT_VARIANT", 1,МассивДанных.Количество());
ЛистПрайс.Range(ЛистПрайс.Cells(СтрокаНачалаДанных,Стр.НомерКолонки),ЛистПрайс.Cells(СтрокаНачалаДанных+МассивДанных.Количество()-1,Стр.НомерКолонки)).Value = МассивCOM;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Как оказалось дело было в том, что массив необходимо транспонировать, чтобы заполнить область данных экселя по вертикали
МассивДанных = ПолучитьМассивИзТаблицыДанных(Стр.ДанныеСтолбца);
//Тут добавляем новый массив и первым элементом вставляем полученный ранее массив
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(МассивДанных);
МассивCOM = Новый COMSafeArray(МассивСтрок,"VT_VARIANT", 1,МассивДанных.Количество());
ЛистПрайс.Range(ЛистПрайс.Cells(СтрокаНачалаДанных,Стр.НомерКолонки),ЛистПрайс.Cells(СтрокаНачалаДанных+МассивДанных.Количество()-1,Стр.НомерКолонки)).Value = МассивCOM;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот