1с и Excel.Application в Excel 2016

1. user963459 18.06.18 10:35 Сейчас в теме
Данный код идеально работает на 2003 и 2007 excel. Но отказывается на последних версиях excel. Подскажите как правильно работать с Excel.Application последних версий Excel.

//*********************************************************

Excel = Новый COMОбъект("Excel.Application");

Если НЕ ПустаяСтрока(ИмяФайла) Тогда

Книга = Excel.WorkBooks.Open(ИмяФайла);

Попытка

ПересохраненыйФайл = КаталогВременныхФайлов() + "NEWtempExcel.xls";

Книга.SaveAs(ПересохраненыйФайл, -4143);

Исключение

Excel.ActiveWorkbook.Close();
Excel.WorkBooks.Close();
Excel.Quit();
Excel = Неопределено;

Сообщить(ОписаниеОшибки());

КонецПопытки;
КонецЕсли;
По теме из базы знаний
Найденные решения
21. user963459 21.06.18 16:48 Сейчас в теме
Решение было найдено. Перезапись поврежденных или сохраненных Excel 2003 xls файлов можно производить с помощью

1. libreoffice
2. Excel 2007 с настройкой DCOM
artichoke; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vafla 18.06.18 13:16 Сейчас в теме
А что происходит? Вылетает по исключению? На какой строке?
5. user963459 18.06.18 13:59 Сейчас в теме
Строка:

Книга = Excel.WorkBooks.Open(ИмяФайла);

Ошибка: Ошибка при вызове метода контекста (Open)
3. singlych 18.06.18 13:25 Сейчас в теме
пальцем в небо

Книга.SaveAs(ПересохраненыйФайл, -4143, , , , , , 2);
4. Vafla 18.06.18 13:51 Сейчас в теме
(3) В том же направлении:

Excel.ActiveWorkbook.SaveAs(.....
6. user963459 18.06.18 13:59 Сейчас в теме
(3) До этого момента не доходит даже. На Open вылетает ошибка.
7. Vafla 18.06.18 14:20 Сейчас в теме
(6) Может быть, выполнение происходит на стороне сервера, а файл на клиенте?..
8. user963459 18.06.18 14:26 Сейчас в теме
(7) Файл загружается из почты. Сохраняется во временном хранилище и потом считывается на сервере из хранилища. Так что с файлом никаких проблем нету.

DCOM тоже настроен. Потому что Excel.Application создается нормально. И можно вертеть как хочешь его параметрами.
9. Vafla 18.06.18 14:37 Сейчас в теме
(8) При наличии (и корректности) файла должен без проблем отрабатывать код:

Excel = Новый COMОбъект("Excel.Application"); 
Книга = Excel.WorkBooks.Open(ИмяФайла);

Что в сообщении об ошибке?
10. user963459 18.06.18 16:05 Сейчас в теме
(9)

Да объект Excel создается. И есть возможность вертеть как хочешь его параметрами. Но проблема когда пытаемся открыть файл с помощью - Open

В строке: Книга = Excel.WorkBooks.Open(ИмяФайла);

Ошибка: Ошибка при вызове метода контекста (Open)
11. Vafla 18.06.18 16:24 Сейчас в теме
(10) Очень похоже на попытку открытия несуществующего файла.
13. Vafla 18.06.18 16:33 Сейчас в теме
(10) Запустите на сервере код:
Попытка
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");

	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);

	EXCELApplication = Новый COMОбъект("Excel.Application");
	EXCELApplication.Workbooks.Open(ИмяВременногоФайла);

	EXCELApplication.ActiveWorkbook.Close(0);
	EXCELApplication.Application.Quit();
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;
Показать
Отработает без ошибок?
16. user963459 18.06.18 18:05 Сейчас в теме
(13) Да, с xls и xlsx Ваш код работает. Но проблема в том что приходит на почту файл сформированный на excel 2003. И для того что б была возможность открывать нужно перезаписать в новый файл.
20. Vafla 19.06.18 09:25 Сейчас в теме
(16) Попробуйте так:
Excel.WorkBooks.Open(ИмяФайла,,,,,,,,,,,,,, CorruptLoad)

CorruptLoad (цифра 0-2):

xlNormalLoad	0	Workbook is opened normally.
xlRepairFile	1	Workbook is opened in repair mode.
xlExtractData	2	Workbook is opened in extract data mode.
12. gradi 5 18.06.18 16:26 Сейчас в теме
(8)
Файл загружается из почты. Сохраняется во временном хранилище и потом считывается на сервере из хранилища. Так что с файлом никаких проблем нету.

А руками файл открывается нормально, без ошибок?
15. user963459 18.06.18 18:02 Сейчас в теме
(12) Нет. Файл формируется отправителем автоматически в excel 2003 года. Так что если открывать вручную то будет ругаться. Код который я написал отрабатывает с excel 2007 нормально. Он открывает поврежденный файл и перезаписывает его в новый. И новый потом можно парсить.

Но проблема в том что excel 2016 не хочет открывать даже файл.
19. gradi 5 19.06.18 09:03 Сейчас в теме
(15)сначала добейтесь открытия файла в ручном режиме. Программно происходят те же процессы, что и при ручном открытии. Проверенно опытом.
14. Timur.V 78 18.06.18 17:05 Сейчас в теме
Переведи код VBA на язык 1С. Обязательно напиши решение сюда.
Создаем объект Excel, потом его открываем. Метки можно выкинуть.

On Error GoTo l
Set objExlApp = CreateObject("Excel.Application")
On Error GoTo l0
objExlApp.Quit
Set objExlApp = CreateObject("Excel.Application.10")
On Error GoTo l1
objExlApp.Quit
Set objExlApp = CreateObject("Excel.Application.11")
On Error GoTo l2
objExlApp.Quit
Set objExlApp = CreateObject("Excel.Application.12")
Exit Sub
l:
Set objExlDoc = objExlApp.Workbooks.Open(iPath$ & nm)
Resume Next
l0:
Set objExlDoc = objExlApp.Workbooks.Open(iPath$ & nm)
Resume Next
l1:
Set objExlDoc = objExlApp.Workbooks.Open(iPath$ & nm)
Resume Next
l2:
Set objExlDoc = objExlApp.Workbooks.Open(iPath$ & nm)
Resume Next
Показать
17. user963459 19.06.18 01:22 Сейчас в теме
(14) Я данным примером и руководствовался.

Excel = Новый COMОбъект("Excel.Application");

Книга = Excel.WorkBooks.Open(ИмяФайла);


На Open - кидает ошибку Ошибка при вызове метода контекста (Open)
18. Timur.V 78 19.06.18 01:28 Сейчас в теме
Может так:
Excel = Новый COMОбъект("Excel.Application.16");
21. user963459 21.06.18 16:48 Сейчас в теме
Решение было найдено. Перезапись поврежденных или сохраненных Excel 2003 xls файлов можно производить с помощью

1. libreoffice
2. Excel 2007 с настройкой DCOM
artichoke; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот