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

Каждый ТабДок в отдельный лист Excel

Автор АндрейМСХ, 24 мая 2018, 10:31

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

АндрейМСХ

Уважаемые форумчане, помогите пожалуйста новичку в 1с.
Задача - спрограммировать отчет, где каждый ТабличныйДокумент сохранялся  в отдельный лист книги Экселя.
Помогите написать функцию.
Подсмотрел на ИнфоСтарте такую функцию


Процедура СохранитьМногостраничныйФайл(ИмяФайла, СоответствиеЛистов) Экспорт

    Х = ПолучитьCOMОбъект("", "Excel.Application");
    Х.SheetsInNewWorkbook = 1; // в новой книге создавать только 1 лист
    Книга = Х.Workbooks.Add();

    Первый = Истина; // у нас уже есть один лист, надо использовать его
    ПрошлыйЛист = Неопределено;

    Для Каждого мЛист Из СоответствиеЛистов Цикл

        // Сохраняем табличный документ во временный файл
        ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
        ТабДок = мЛист.Значение;
        ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);

        Х.CutCopyMode = False; // Сбрасываем старое копирование

        // Копируем первый (единственный) лист временного файла
        мКнига = Х.Workbooks.Open(ИмяВременногоФайла);
        мКнига.Worksheets(1).Cells.Select();
        Х.Selection.Copy();

        Если Первый Тогда // Используем созданный автоматически
            НовыйЛист = Книга.Worksheets(1);
            Первый = Ложь;
        Иначе // добавляем новый
            НовыйЛист = Книга.Worksheets.Add(, ПрошлыйЛист); // Добавляем новый лист после прошлого
        КонецЕсли;

        НовыйЛист.Name = мЛист.Ключ; // Задаём имя
        НовыйЛист.Paste(); // Вставляем содержимое

        // Сбрасываем выделение с добавленного листа
        НовыйЛист.Activate();
        Х.Range("A1").Select();

        ПрошлыйЛист = НовыйЛист;

    КонецЦикла; // Для Каждого мЛист Из СоответствиеЛистов Цикл

    Х.DisplayAlerts = False; // Отключаем вывод предупреждений типа "Заменить файл?"
    Книга.Worksheets(1).Activate(); // Активируем 1 лист из списка
    Книга.SaveAs(ИмяФайла);

    Х.Quit();

    Х = Неопределено;

КонецПроцедуры // СохранитьМногостраничныйФайл()


Есть описание, что
СоответствиеЛистов  -
//                          (1) Соответствие:
//          Ключ            - Строка - Имя листа
//          Значение        - Табличный документ - Содержимое листа
//                          (2) Таблица значений с колонками Ключ и Значение.
//                              Может понадобиться, если требуется строгий порядок листов.

Подскажите пожалуйста, как прописать Параметр СоответствиеЛистов?
Заранее благодарен.

ilyay

СоответствиеЛистов = Новый Соответствие;
СоответствиеЛистов.Вставить("Имя листа1", ТабДок1);
СоответствиеЛистов.Вставить("Имя листа2", ТабДок2);

AIFrame

//                          (1) Соответствие:
//          Ключ            - Строка - Имя листа
//          Значение        - Табличный документ - Содержимое листа

СоответствиеЛистов = Новый Структура;
СоответствиеЛистов.Вставить("ЛистСФигней", ТЧ_С_Фигней);
СоответствиеЛистов.Вставить("ЛистВажный", ТЧ_Важная);
СоответствиеЛистов.Вставить("ЛистСКотиками", ТЧ_С_Котиками);

//                          (2) Таблица значений с колонками Ключ и Значение.
//                              Может понадобиться, если требуется строгий порядок листов.


СоответствиеЛистов = Новый ТаблицаЗначений;
СоответствиеЛистов.Колонки.Добавить("Ключ");
СоответствиеЛистов.Колонки.Добавить("Значение");

НоваяСтрокаТЧ = СоответствиеЛистов.Добавить();
НоваяСтрокаТЧ.Ключ = "ЛистСФигней";
НоваяСтрокаТЧ.Значение = ТЧ_С_Фигней;

НоваяСтрокаТЧ = СоответствиеЛистов.Добавить();
НоваяСтрокаТЧ.Ключ = "ЛистВажный";
НоваяСтрокаТЧ.Значение = ТЧ_Важная;

НоваяСтрокаТЧ = СоответствиеЛистов.Добавить();
НоваяСтрокаТЧ.Ключ = "ЛистСКотиками";
НоваяСтрокаТЧ.Значение = ТЧ_С_Котиками;

Все за вас делать надо.

ilyay

8.3.12 вышла и поддерживает сохранение много листов
http://v8.1c.ru/overview/release_8_3_12/

АндрейМСХ

Огромнейшее спасибо всем вышеотписавшимся мудрецам!:ooifh:

Вроде все описал, вылетает ошибка при выводе отчета

(ПолучитьCOMОбъект)
   Х = ПолучитьCOMОбъект("", "Excel.Application");
по причине:
Ошибка получения объекта COM: -2147467262(0x80004002): Интерфейс не поддерживается


в связи с чем, господа?
на сервере офис 2010 стоит.

ilyay


АндрейМСХ


ilyay

Майкрософт не рекомендует офис на сервере.
Можешь здесь посмотреть, вдруг поможет https://www.mista.ru/topic.php?id=712200

АндрейМСХ

Цитата: ilyay от 24 мая 2018, 15:13
Майкрософт не рекомендует офис на сервере.
Можешь здесь посмотреть, вдруг поможет https://www.mista.ru/topic.php?id=712200

А если поставить НаКлиенте то выдает следующее

Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно

ilyay

Проверьте, что у вас в ИмяФайла. Путь должен быть доступен на клиенте.

Теги:

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

Рейтинг@Mail.ru

Поиск