База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сохранить несколько таблиц 1С на разные листы в одной книге Excel? › Ответ в теме: Как сохранить несколько таблиц 1С на разные листы в одной книге Excel?
В 1С стандартными средствами напрямую записать несколько табличных документов на разные листы одной книги Excel через метод ТабличныйДокумент.Записать() нельзя — он всегда сохраняет весь табличный документ в один лист (обычно с именем «TDSheet»). Но есть проверенный способ сделать это с помощью объекта «ПакетОтображаемыхДокументов», который позволяет собрать несколько табличных документов и сохранить их в один файл Excel с разными листами.
Примерный алгоритм:
1. Создаёте объект ПакетОтображаемыхДокументов:
|
1 |
Пакет = Новый ПакетОтображаемыхДокументов; |
2. В цикле по вашим табличным документам (отчётам) добавляете каждый в состав пакета:
|
1 2 3 4 5 6 |
Для каждого ТабДок из МассивТабличныхДокументов Цикл Элемент = Пакет.Состав.Добавить(); Элемент.Данные = ПоместитьВоВременноеХранилище(ТабДок); // Можно задать имя листа, если нужно: Элемент.Имя = "Отчет_" + Строка(НомерОтчета); КонецЦикла; |
3. Сохраняете весь пакет в один файл Excel:
|
1 2 |
ИмяФайла = "ПутьКФайлуОтчеты.xlsx"; Пакет.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLSX); |
В итоге в файле «Отчеты.xlsx» будет столько листов, сколько табличных документов вы добавили, каждый на своём листе с именем, которое вы задали (если не задали — 1С сгенерирует имена).
Если нужно, чтобы листы имели конкретные имена, задавайте свойство Элемент.Имя перед добавлением в пакет.
—
Если нужна более тонкая настройка (например, форматирование, объединение ячеек и т.п.), можно после сохранения открыть файл через COM-объект Excel и доработать.
—
Пример кода целиком:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Процедура СохранитьНесколькоТабличныхДокументовВОдинExcel(МассивТабДок) Пакет = Новый ПакетОтображаемыхДокументов; Номер = 1; Для каждого ТабДок из МассивТабДок Цикл Элемент = Пакет.Состав.Добавить(); Элемент.Данные = ПоместитьВоВременноеХранилище(ТабДок); Элемент.Имя = "Лист_" + Строка(Номер); Номер = Номер + 1; КонецЦикла; ИмяФайла = ВременныеФайлы.Каталог + "Отчеты.xlsx"; Пакет.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLSX); Сообщить("Файл сохранён: " + ИмяФайла); КонецПроцедуры |
—
Если по каким-то причинам нельзя использовать ПакетОтображаемыхДокументов (например, устаревшая версия платформы), то можно выгружать табличные документы по отдельности в разные файлы, а потом объединять их средствами Excel через COM, но это сложнее и менее удобно.