Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение из EXEL: не удается найти указанного поставщика
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Constantus
Приветствую, форумчане!
1с8.3.6, УФ, самописная.

Для чтения данных из файла *.xlsx при использовании:

СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=[Источник]; Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";
Подключение = СтрЗаменить(СтрокаПодключения,"[Источник]", ИмяФайлаEXCEL);


Выходит сообщение:

Цитата
{Документ.ПоступлениеНаРасчетныйСчетПоЭквайрингу.МодульОбъекта(51)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.


Прочитал многое, даже дошел до откатов от обновлений виндовс, даже драйвер удален с сайтов Микрософтовцев...

Не подскажите, может есть более простой способ чтения из Эксель небольшого файла? Или может есть способ борьбы с текущей ситуацией?


Код раотает на сервере, на Постгрессе. На ПК не установлен ни один продукт МикрософтОфисе

nik389
Если не ошибаюсь, именно с версии 8.3.6 1с умеет ТабличныйДокумент.Прочитать("ИмяФайлаЕксель")
а дальше работаете с табличным документом
Petre
Constantus @ Today, 16:27 необходимо зарегистрироваться для просмотра ссылки ,
Так драйвер установлен или нет?
Constantus
Petre @ Сегодня, 20:03 необходимо зарегистрироваться для просмотра ссылки ,

Скачали AccessDatabaseEngine, запустил. Как теперь проверить установлен он или нет? ОДБС не показал установленных драйверов.
Мож есть какие-то нюансы при установке этого драйвера?
Petre
Constantus @ Today, 17:35 необходимо зарегистрироваться для просмотра ссылки ,
Обратите внимание на разрядность драйверов. Для разной разрядности свои оснастки.
VXIIIZ
Цитата(Constantus @ 26.02.19, 16:27) необходимо зарегистрироваться для просмотра ссылки
Не подскажите, может есть более простой способ чтения из Эксель небольшого файла?


Я пользуюсь вот этим способом

необходимо зарегистрироваться для просмотра ссылки
Vladal
Цитата(VXIIIZ @ 27.02.19, 9:57) необходимо зарегистрироваться для просмотра ссылки
Я пользуюсь вот этим способом

необходимо зарегистрироваться для просмотра ссылки

Что мешает давать ссылку на первоисточник?
необходимо зарегистрироваться для просмотра ссылки

Так как сам пользуюсь LibreOffice, а на некоторых рабочих машинах вообще ничего кроме 1С не установлено, то пишу так:

Функция ПолучитьТабДок()
    
    ТабДок = Новый ТабличныйДокумент;
    
    Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь);
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.Фильтр = "Все файлы xls (*.xls*)|*.*|";
    Если Не Диалог.Выбрать() Тогда
        Возврат ТабДок;
    КонецЕсли;
    Попытка
        ТабДок.Прочитать(Диалог.ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
    Исключение
        ОбщегоНазначения.СообщитьОбОшибке("При чтении файла Excel произошла ошибка:
        |" + ОписаниеОшибки());
        Возврат ТабДок;
    КонецПопытки;
    
    Возврат ТабДок;
    
КонецФункции // ПолучитьТабДок()


А далее просто перебираю области табличного документа, подобно Эксель:

    //Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл
    Пока ЗначениеЗаполнено(ТабДок.Область(1,Сч).Текст) Цикл
        
        ОбработкаПрерыванияПользователя();
        
        //ИмяКолонки = Excel.Cells(1, Сч).Text;
        ИмяКолонки = ТабДок.Область(1,Сч).Текст;
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ","");
        
        Если ИмяБезПробелов = "Код" Тогда
            НоваяКолонка = Таблица.Колонки.Добавить(ИмяПредыдущейКолонки+ИмяБезПробелов, ТипСтрока,, 20);
        ИначеЕсли ИмяБезПробелов = "Сумма" Тогда
            НоваяКолонка = Таблица.Колонки.Добавить(ИмяБезПробелов, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(19, 4),, 20);
        ИначеЕсли ИмяБезПробелов = "Дата" Тогда
            НоваяКолонка = Таблица.Колонки.Добавить(ИмяБезПробелов, ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата),, 20);
        Иначе
            НоваяКолонка = Таблица.Колонки.Добавить(ИмяБезПробелов, ТипСтрока, ИмяКолонки, 20);
        КонецЕсли;
    
        ИмяПредыдущейКолонки = ИмяБезПробелов;
        Сч = Сч + 1;
        
    КонецЦикла;


А если заведомо известно, что все данные - строки или не надо с ними заморачиваться, то делаю так: (всего 3 строчки)

    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, Табдок.ШиринаТаблицы));
    Построитель.Выполнить();
    ТаблицаЗначений = Построитель.Результат.Выгрузить();


Еще можно читать с помощью adodb, но давно этот метод не использовал
необходимо зарегистрироваться для просмотра ссылки
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.