Добрый день, написал обработку по загрузке из экселя в табличную часть, но вылетает ошибка COM объекта
Добрый день, написал обработку по загрузке из экселя в табличную часть, но при попытке подключиться к экселю вылетает ошибка
Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
Код на клиенте, если делаю на сервере то ошибка ком объект не определен
База серверная, куда копать? Заранее спасибо!
Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
Код на клиенте, если делаю на сервере то ошибка ком объект не определен
База серверная, куда копать? Заранее спасибо!
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(Объект.Каталог);
//Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
//Открываем необходимый лист
Excel.Sheets(1).Select(); // лист 1, по умолчанию
Исключение
//Закрываем Excel
Excel.ActiveWorkbook.Close();
Excel = 0;
Сообщить("Файл "+Строка(Объект.Каталог)+" не соответствует необходимому формату! Первый лист не найден!");
Возврат;
КонецПопытки;
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Попробовать установить эксель на сервере?
На Сервере эксель не установлен вроде бы
Тип файла определяет как файл XLS, а вот в приложение в свойствах файла пишет "Неизвестное приложение"
На клиентском компьютере есть эксель но не помогает, он попросту не видит
На Сервере эксель не установлен вроде бы
Тип файла определяет как файл XLS, а вот в приложение в свойствах файла пишет "Неизвестное приложение"
На клиентском компьютере есть эксель но не помогает, он попросту не видит
(1) Разбирай через построитель. Только надо в файле колонки обозвать одним словом без пробелов.
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТаблицаЗначений = ПЗ.Результат.Выгрузить();
Показать
(11) Параллельно пытался зарегистрировать DLL на клиентском компьютере, зарегистрировалась, но ошибка осталась. 64 разрядная ось на клиентском компьютере, но разные версии платформ, на клиентском 8.3.16, на сервере 8.3.18. может ли быть из-за этого? Не знаете?
&НаСервере
Функция ЗагрузкаНоменклатуры_ПрочитатьФайл(ИмяФайла)
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ИмяФайла);
ВсегоСтрок = ТабДокумент.ВысотаТаблицы;
ВсегоКолонок = ТабДокумент.ШиринаТаблицы;
Область = ТабДокумент.Область(1,1,ВсегоСтрок,ВсегоКолонок);
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений;
КонецФункции
ПоказатьУ меня вот так любой Ексель файл читает.
(34)
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
{ВнешняяОбработка.ЗагрузкаИзЭксель.Форма.Форма.Форма(171)}: ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
{ВнешняяОбработка.ЗагрузкаИзЭксель.Форма.Форма.Форма(17)}: ТЗ = Построитель(Объект.Каталог);
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
(21)
а у меня ругается
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ИмяФайла);
ВсегоСтрок = ТабДокумент.ВысотаТаблицы;
ВсегоКолонок = ТабДокумент.ШиринаТаблицы;
Область = ТабДокумент.Область(1,1,ВсегоСтрок,ВсегоКолонок);
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений;
ПоказатьТабДокумент.Прочитать(ИмяФайла);
ВсегоСтрок = ТабДокумент.ВысотаТаблицы;
ВсегоКолонок = ТабДокумент.ШиринаТаблицы;
Область = ТабДокумент.Область(1,1,ВсегоСтрок,ВсегоКолонок);
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений;
а у меня ругается
[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
(27)
На сервере всё, ошибка не уходит
&НаСервере
Функция Построитель(ИмяФайла)
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ИмяФайла);
ВсегоСтрок = ТабДокумент.ВысотаТаблицы;
ВсегоКолонок = ТабДокумент.ШиринаТаблицы;
Область = ТабДокумент.Область(1,1,ВсегоСтрок,ВсегоКолонок);
ИсточникДанных = Новый ОписаниеИсточникаДанных;//(Область);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
Возврат ТабЗначений;
КонецФункции
ПоказатьНа сервере всё, ошибка не уходит
У меня все работает. Только ты Таблицу значений на клиент возвращаешь. Так не получится
&НаКлиенте
Процедура ЗаполнитьТабличнуюЧасть(Команда)
ТЗ = Построитель(Объект.Каталог);-----------Здесь возврат из функции таблицы значений
Объект.ТЧ.Очистить();
Дополню обсуждение. У меня возникла ошибка как описано выше. Что я только не делал: и регистрировал, и отменял регистрацию компоненты. А в итоге выяснил, что дело было в платформе 8.3.22.1750. Она, как я выяснил, выдаёт ошибку как выше. А платформы 8.3.18.1363 и 8.3.23.1596 на том же коде работает без проблем. Может кому полезно будет
(39) Upd. Разобрался с ошибкой. Итак она возникала не из-за платформы. Дело было в том, что режим работы клиент-серверный, а Excel на сервере установлен не был. То есть на клиенте установленный Excel не влияет на работу кода на сервере. И да, передаваемый адрес расположения файла на локальной машине на сервере просто не найдётся.
(46) Диалог выбора файла, помещение во временное хранилище и передача на сервер. Далее
Читает 100+ строк чуть дольше мгновения
&НаСервере
Процедура ОбработатьФайлНаСервере(АдресФайла,СтрокиДанныхНачалоКонец)
ПолноеИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
ДвоичныеДанные.Записать(ПолноеИмяФайла);
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПЗ = Новый ПостроительЗапроса;
ПараметрыЗагрузки = ПолучитьПараметрыЗагрузки(ТабДокумент);
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ПараметрыЗагрузки.ТабДокумент.Область(СтрокиДанныхНачалоКонец.ПерваяСтрока,1,СтрокиДанныхНачалоКонец.ПоследняяСтрока,100));
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
ТЗ = ПЗ.Результат.Выгрузить();
УдалитьФайлы(ПолноеИмяФайла);
ОбработатьФайлНаСервереЗавершение(ТЗ,ПараметрыЗагрузки.ПартнерЯндекс);
КонецПроцедуры
ПоказатьЧитает 100+ строк чуть дольше мгновения
(47) Да, этот код работает просто супер. Но вот с чем я не смог разобраться. Под пользователем с полными правами всё отлично работает. Но под обычным пользователем на строке
ДвоичныеДанные.Записать(ПолноеИмяФайла);
Выдаётся ошибка:
Ошибка при вызове метода контекста (Записать)
по причине:
Установлен безопасный режим. Выполнение операции запрещено
Не подскажете как справиться?
ДвоичныеДанные.Записать(ПолноеИмяФайла);
Выдаётся ошибка:
Ошибка при вызове метода контекста (Записать)
по причине:
Установлен безопасный режим. Выполнение операции запрещено
Не подскажете как справиться?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот