Имя: Пароль:
1C
1С v8
Не получается загрузить таблицу значений в Excel через COMSafeArray
0 marshalbratsk
 
08.12.16
11:56
Пытаюсь загрузить таблицу значений (без первых трёх столбцов) в Эксель через COMSafeArray, но выдаёт ошибку:
"Ошибка при установке значения атрибута контекста (Value)
Sheet.Range(Sheet.Cells(15,1), Sheet.Cells(КоличествоСтрок+15,КоличествоКолонок-2)).Value = МассивКом;          
по причине:
Произошла исключительная ситуация (0x800a03ec)"
ЧЯДНТ?

Вот код

    ТЗ10 = Построитель.Результат.Выгрузить();
    
    КоличествоСтрок = ТЗ10.Количество();
    КоличествоКолонок = ТЗ10.Колонки.Количество();
    
    МассивКом = Новый COMSafeArray("VT_VARIANT",КоличествоКолонок, КоличествоСтрок);
    Для ИндСтрок = 0 по КоличествоСтрок-1 Цикл
    СтрокаТаблицы = ТЗ10[индСтрок];
    Для ИндКолонок = 3 по КоличествоКолонок - 1 Цикл
        А=индКолонок;
        Б=ИндСтрок;
        В=СтрокаТаблицы[индКолонок];
        МассивКОМ.SetValue(А,Б,В);
    КонецЦикла;
    КонецЦикла;
    Sheet.Range(Sheet.Cells(15,1), Sheet.Cells(КоличествоСтрок+15,КоличествоКолонок-3)).Value = МассивКом;
1 marshalbratsk
 
08.12.16
11:58
2 marshalbratsk
 
08.12.16
12:23
Дело именно в МассивКОМ, думаю. В отладчике он значениями заполнен, но не хочет присваиваться диапазону в экселе
3 marshalbratsk
 
09.12.16
03:28
Тема всё ещё актуальна(
4 marshalbratsk
 
09.12.16
06:08
Попробовал перевести таблицу значений в двумерный массив, затем уже записать это дело двумя способами, но ничего

    ТЗ10 = Построитель.Результат.Выгрузить();
    
    КоличествоСтрок = ТЗ10.Количество();
    КоличествоКолонок = ТЗ10.Колонки.Количество();
    
    МассивТЗ = Новый Массив();
    МассивТЗ = ТаблицаЗначенийВМассив(ТЗ10);
    

    МассивКом= НОВЫЙ COMSafeArray(МассивТЗ,"VT_VARIANT",КоличествоСтрок,КоличествоКолонок-3);    
    Sheet.Range(Sheet.Cells(15,1), Sheet.Cells(КоличествоСтрок+14,КоличествоКолонок-3)).Clear();
    Sheet.Range(Sheet.Cells(15,1), Sheet.Cells(КоличествоСтрок+14,КоличествоКолонок-3)).Value = МассивКом;  

Функция ТаблицаЗначенийВМассив(ТаблицаЗначений)
    СТР=ТаблицаЗначений.Количество();
    КОЛ=ТаблицаЗначений.Колонки.Количество();
    Массив = Новый Массив(СТР, КОЛ-3);
    Для i=0 по СТР-1 цикл
        Для j=0 по КОЛ-4 цикл
            Массив[i][j]=ТаблицаЗначений[i][j+3];
        КонецЦикла;
    КонецЦикла;
    Возврат Массив;    
КонецФункции;

Попробовал ещё этот способ
v8: Выгрузка массива из 1С в Excel
5 MaxS
 
09.12.16
06:23
Файл Excel с каким-то уникальным содержанием? Средствами 1С нельзя создать табличный документ и сохранить как Excel?
6 marshalbratsk
 
09.12.16
06:24
(5) Да, нужно забивать именно в этот файл
7 MaxS
 
09.12.16
06:38
Как вариант - руками забить данные, потом 1С-ом загрузить из файла в COMSafeArray и отладчиком посмотреть в чем отличие от МассивКом...
8 marshalbratsk
 
09.12.16
08:02
Проблема устранена. В паре колонок был тип данных, неугодный экселю. Изменил тип на строку и всё начало выгружаться. Спасибо
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн