Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks
Цепляюсь к xls-файлу для импорта данных. Код:
Выдает ошибку "Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks"
Причем, сволочь такая, если это делать внешней обработкой, то все нормально работает чаще всего, а из документа, как, собственно, и надо, выдает сабж.
Win7_64, Excel 2003
Кто-то поборол эту проблему. Инет читал. Создание папки Desktop результата не дало.
Попытка
Эксел = СоздатьОбъект("Excel.Application");
Исключение
Предупреждение("На компьютере не установлен Microsof Excel." + РазделительСтрок + "Импорт цен невозможен.");
Возврат;
КонецПопытки;
КнигиЭкселя = Эксел.Workbooks;
Книга = КнигиЭкселя.Open(ФайлДанных);
Эксел = СоздатьОбъект("Excel.Application");
Исключение
Предупреждение("На компьютере не установлен Microsof Excel." + РазделительСтрок + "Импорт цен невозможен.");
Возврат;
КонецПопытки;
КнигиЭкселя = Эксел.Workbooks;
Книга = КнигиЭкселя.Open(ФайлДанных);
Выдает ошибку "Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks"
Причем, сволочь такая, если это делать внешней обработкой, то все нормально работает чаще всего, а из документа, как, собственно, и надо, выдает сабж.
Win7_64, Excel 2003
Кто-то поборол эту проблему. Инет читал. Создание папки Desktop результата не дало.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Эксель=СоздатьОбъект("Excel.Application");
ТекущаяКнига=Эксель.Workbooks.Open(ФайлДанных);
ТекущийЛист=ТекущаяКнига.Worksheets(1);
Ну и так далее, главное не забывать даже в результате ошибок очищать переменные...
Иначе второй раз файл не откроешь. Ну или копать глубже, открывать для чтения...
Но это один из самых долгий способов загрузки данных из xls(xlsx)- файлов.
(5)Оба варианта чего?
Исходный код:
Есть разница?
Эксель=СоздатьОбъект("Excel.Application");
ТекущаяКнига=Эксель.Workbooks.Open(ФайлДанных);
ТекущаяКнига=Эксель.Workbooks.Open(ФайлДанных);
//Создаем ОЛЕ подключение к Excel
Excel = СоздатьОбъект("Excel.Application");
//Открываем файл
Excel.Workbooks.Open(ПутьКФайлу);
Excel = СоздатьОбъект("Excel.Application");
//Открываем файл
Excel.Workbooks.Open(ПутьКФайлу);
Исходный код:
Эксел = СоздатьОбъект("Excel.Application");
КнигиЭкселя = Эксел.Workbooks;
Книга = КнигиЭкселя.Open(ФайлДанных);
КнигиЭкселя = Эксел.Workbooks;
Книга = КнигиЭкселя.Open(ФайлДанных);
Есть разница?
(8) saszj,
Сейчас обратил внимание что
Устанавливал 7.7 копированием? После этого какие то манипуляции проводил?
Есть разница?
Принципиальной разницы конечно нет, как и нет разницы запускать код из внешней обработки или из модуля документа, но чем черт не шутит... я бы все испробовал.
Сейчас обратил внимание что
Win7_64
Устанавливал 7.7 копированием? После этого какие то манипуляции проводил?
у меня вот так написано не из документов не из обработки проблем не было:
//Создаем ОЛЕ подключение к Excel
Excel = СоздатьОбъект("Excel.Application");
//Открываем файл
Excel.Workbooks.Open(ПутьКФайлу);
//Открываем активную книгу
Книга = Excel.ActiveWorkbook;
Показать
(12)Резервные копии системы? :) Код проги не менял - пытался через права доступа к каталогам все решить, как в некоторых статьях рекомендуют.
(13)Да я уже думал в эту сторону, но у меня основная заковыка в том, что файл "плавающей" структуры - количество листов, колонки в каждом листе отличаются от файла к файлу. Часть данных для загрузки вообще в комментарии ячейки "сидит". Как с этим всем работать через ODBC почитать негде. С экселем проще - можно через запись макросов докопаться до нужных свойств листа.
Если есть ссыль на докуменацию по работе с экселем через ODBC, буду благодарен.
(14)Перезагрузка даже не помогает.
(13)Да я уже думал в эту сторону, но у меня основная заковыка в том, что файл "плавающей" структуры - количество листов, колонки в каждом листе отличаются от файла к файлу. Часть данных для загрузки вообще в комментарии ячейки "сидит". Как с этим всем работать через ODBC почитать негде. С экселем проще - можно через запись макросов докопаться до нужных свойств листа.
Если есть ссыль на докуменацию по работе с экселем через ODBC, буду благодарен.
(14)Перезагрузка даже не помогает.
На вот на это посмотри...
Мне лично такой вариант больше нравится.
Мне лично такой вариант больше нравится.
BaseExel = "";
СтрокаКолонки=",";
Состояние("Подключение к базе данных");
BaseExel = CreateObject("ODBCDatabase");
Попытка
ConnectionString = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=1;PageTimeout=5;MaxScanRows=8;FIL=excel 12.0;DriverId=1046;DBQ="+СтрЗаменить(КаталогИБ()+"\NissanGarant\"+Путь,"\\","\")+";";
Если BaseExel.Соединение(ConnectionString)=0 Тогда
Сообщить(BaseExel.ПолучитьОписаниеОшибки());
Сообщить("Облом...");
Возврат 0;
Иначе
Состояние("Установлено соединение с базой данных...");
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
Состояние("Начинаем считывание данных...");
Команда = СоздатьОбъект("ODBCRecordSet");
Команда.УстБД(BaseExel);
Если Найти(Путь,"Comment")=0 Тогда
ТекстСелект = "SEL ECT * FR OM [VIN_LIST$] WH ERE VIN = '"+СокрЛП(Авто.Код)+"'";//ИмяТаблицы;
Иначе
ТекстСелект = "SELECT * FR OM [VIN_LIST$]";//ИмяТаблицы;
КонецЕсли;
Попытка
НаборЗаписей=Команда.ВыполнитьИнструкцию(ТекстСелект);
Исключение
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
//Сообщить(НаборЗаписей.КоличествоСтрок());
Если Найти(Путь,"Comment")=0 Тогда
Возврат(НаборЗаписей);
Иначе
Description.Загрузить(НаборЗаписей);
Возврат 0;
КонецЕсли;
Показать
Проблема актуальна для многих языков, у меня, например, в vbs возникла. Была связана с тем, что файл экселя при интерактивном открытии выдавал диалоговое окно с предложением преобразовать формат файла (т.к. это результат выгрузки из другой БД). Полагаю, что команда "зависает" на обработке диалогового окна.
После повторного сохранения документа в интерактивном режиме диалог перестал появляться и Workbooks.Open стал вновь работать так, как должен.
После повторного сохранения документа в интерактивном режиме диалог перестал появляться и Workbooks.Open стал вновь работать так, как должен.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот