Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 18:16

Сохрание xls в xlsx

Автор magnifico61, 30 мая 2018, 22:18

0 Пользователей и 1 гость просматривают эту тему.

magnifico61


ФайлНовый = ПолучитьИмяВременногоФайла("xlsx");
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.WorkBooks.Open(Объект.Файл);
Книга.SaveAs(ФайлНовый);
Excel.Quit();
Excel = Неопределено;


Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?

pavl_vs

Цитата: magnifico61 от 30 мая 2018, 22:18
Файл сохраняется, но при открытии ошибка формат или расширение файла является недопустимым.
Как мне сохранить файл в новый формат?

Сохранить сначала в xls-формате, открыть файл в Excel, поддерживающем xlsx и сохранить его в нужном.

Что за конфигурация у Вас, почему возникла потребность в программировании?

magnifico61

УТ 11. Excel поддерживает xlsx.

Руками каждый раз пересохранять файл нет возможности, так как постоянно грузится большое количество данных с разных файлов Excel.
Это необходимо чтобы облегчить работу пользователю.

pavl_vs

А сама УТ 11 не поддерживает выгрузку в xlsx-формате?
А если  .xlsx выгруженного файла изменить на  .xls, открываться будет?
Excel новых версий поддерживает оба формата, так зачем эти "городушки"?

На какой платформе работаете?

magnifico61

в xls не пробовал сохранить.
платформа 8.3.10.2580

Z.spb

Пользовался таким, чтобы пересохранить наоборот, xlsx в xls. Остальные варианты не пробовал но, думаю, всё будет работать.

Функция ПересохранитьЭксельФайл(ПутьКФайлу,ПутьНового=Неопределено,пФорматФайла=51)

Попытка
ExcelЗапущен = Ложь;

//Проверка на существование файла
мФайл = Новый Файл(ПутьКФайлу);
Если НЕ мФайл.Существует() Тогда
ТекстИскл = "[Файл: " + ПутьКФайлу + " не найден.]";
ВызватьИсключение ТекстИскл;
КонецЕсли;

СоответствиеРасширений = Новый Соответствие;

СоответствиеРасширений.Вставить(45, ".mht");
СоответствиеРасширений.Вставить(46, ".xml");
СоответствиеРасширений.Вставить(23, ".csv");
СоответствиеРасширений.Вставить(9,  ".dif");
СоответствиеРасширений.Вставить(8,  ".dbf");
//работает только в 2007
СоответствиеРасширений.Вставить(51, ".xlsx");
СоответствиеРасширений.Вставить(47, ".xml");
СоответствиеРасширений.Вставить(57, ".pdf");
СоответствиеРасширений.Вставить(60, ".ods");
//

СоответствиеВерсий = Новый Соответствие;

СоответствиеВерсий.Вставить(45, "11.0");
СоответствиеВерсий.Вставить(46, "11.0");
СоответствиеВерсий.Вставить(23, "11.0");
СоответствиеВерсий.Вставить(9,  "11.0");
СоответствиеВерсий.Вставить(8,  "11.0");
//работает только в 2007
СоответствиеВерсий.Вставить(51, "12.0");
СоответствиеВерсий.Вставить(47, "12.0");
СоответствиеВерсий.Вставить(57, "12.0");
СоответствиеВерсий.Вставить(60, "12.0");
//

Расширение = СоответствиеРасширений.Получить(пФорматФайла);
Если Расширение=Неопределено Тогда
ВызватьИсключение "[Неверно указан параметр ""Формат файла"".]";
КонецЕсли;

Если ПутьНового=Неопределено Тогда
ПутьНового=ПолучитьИмяВременногоФайла(Расширение);
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
ExcelЗапущен = Истина;
Исключение
ВызватьИсключение "[Не удалось запустить Excel.]" + Символы.ПС + ОписаниеОшибки();
КонецПопытки;

//проверка возможности сохранения в выбранный формат
Если Excel.Version < СоответствиеВерсий.Получить(пФорматФайла) Тогда
ВызватьИсключение "[В текущей версии Excel выбранный формат файла ("+Расширение+") не поддерживается.]";
КонецЕсли;

Excel.Visible       = Ложь;
Excel.DisplayAlerts = Ложь;

КнигаExcel = Excel.WorkBooks.Open(ПутьКФайлу);
КнигаExcel.SaveAs(ПутьНового, пФорматФайла);

КнигаExcel.Close();
Excel.DisplayAlerts = Истина;
Excel.Quit();
Excel = Неопределено;

Возврат ПутьНового;

Исключение
Если ExcelЗапущен Тогда
Excel.Quit();
КонецЕсли;
КнигаExcel = Неопределено;
Excel      = Неопределено;
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;

КонецФункции

wise

Если  Число(Excel.version) < 12 Тогда
// Excel это ComОбъект("Excel.application")

   FileFormatNum = -4143// ага, загадочное число

Иначе
   FileFormatNum = 56// ну что мешало сделать форматы стандартными?

КонецЕсли;
БольшойОтчет.SaveAs(ИмяОтчета,FileFormatNum);


отсюда:
https://www.mista.ru/topic.php?id=637830
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Z.spb

Цитата: wise от 31 мая 2018, 13:19
Иначе
   FileFormatNum = 56
:o lol , в моей функции как раз формат "56", т.е. xls отсутствует. Видимо я именно в xlsx и сохранял, а про xls забыл. Спасибо за подсказку.

Т.е. нужно добавить в мою функцию
СоответствиеРасширений.Вставить(56,  ".xls");
СоответствиеВерсий.Вставить(56,  "11.0");

magnifico61

Спасибо, работает

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск