Как программно сохранить табличный документ в excel 1с
Программно сохраняю прайс или отчет в формате XLSX методом табличного документа. Когда открываю файл, у него формат Общий. Это клиентов не устраивает. Поэтому и вопрос: Как сохранить табличный документ с форматом ячеек Тестовый?
v8: Табличный документ. Формат ячеек
(22) и далее
пысы: сам не пробовал
(1) отбой, не то
Похоже, только если формировать печатную форму через Excel.Application и с установкой у ячеек NumberFormat = «@»
(3) Я не хочу запускать Excel. В этом ограничение.
Приведенный пример только с использованием Excel
ВК из соседней ветки?
Сохраняем mxl в Excel 2007
(6) Там немного другое и для 8-ки пока не сделано
(7) Прижми в право или влево не помню
(8) Это не помогает после сохранения в Excel
(10) Не плохо. Осталось только к СКД прикрутить.
У меня прайс формируется в СКД. Как применить это из ссылки (10) ?
Обрабатываю полученный табличный документ кодом
МассивБулево = Новый Массив;
МассивБулево.Добавить(Тип(«Строка»));
ОписаниеТиповСтрока = Новый ОписаниеТипов(МассивБулево);
НомерКолонки=0;
Для а = 1 по Результат.ВысотаТаблицы Цикл
Для б=1 По Результат.ШиринаТаблицы Цикл
ТекстЯчейки=»»+Результат.Область(а,б,а,б).Текст;
Результат.Область(а,б,а,б).СодержитЗначение=Истина;
Результат.Область(а,б,а,б).ТипЗначения=ОписаниеТиповСтрока;
Результат.Область(а,б,а,б).Значение=ТекстЯчейки;
//Результат.Область(а,б,а,б).ФорматРедактирования=»»;
//Результат.Область(а,б,а,б).Формат=»строка»;
КонецЦикла;
КонецЦикла;
Но это не помогает
(12) (13) Одно не исключает другого. Правда, я подобное в шаблон типового отчета для ОФ добавлял(давно это было), там проще получилось. Пример:
ТиповыеОтчеты.СформироватьТиповойОтчет(ЭтотОбъект, Результат, ДанныеРасшифровки, ВыводВФормуОтчета);
ОбластьЗаголовка = Результат.Области.Найти(«Заголовок»);
ОбластьРезультата = Результат.Область(?(ОбластьЗаголовка <> Неопределено, ОбластьЗаголовка.Низ + 3, 1), 1, Результат.ВысотаТаблицы, Результат.ШиринаТаблицы);
ОбластьРезультата.СодержитЗначение = Истина;
ОбластьРезультата.ТипЗначения = Новый ОписаниеТипов(«Строка»);
В результате сделал через Excel, хотя не хотелось.
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ИмяФайла);
Excel.Visible = 0;
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;
Excel.Cells.Select();
Excel.Selection.NumberFormat = «@»;
//FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Если Расширение=»XLSX» Тогда
Excel.ActiveWorkbook.SaveAs(ИмяФайла, 51); // 18 — xls 97-2003; 51 — xlsx 2007-2013
Иначе
Excel.ActiveWorkbook.SaveAs(ИмяФайла, 18); // 18 — xls 97-2003; 51 — xlsx 2007-2013
КонецЕсли;
Excel.Application.Quit();// завершаем процесс Excel
Excel = Неопределено;
(15) Это не кошерно. Но (10) и (14) наконец-то дают надежду победить этот косяк Exell
апостроф в начало пробовали добавлять? ‘
(16) Я этим путём проходил. см (13). Но после сохранения табличного документа в Excel формат остаётся Общим. при этом в исходном файле mxl в каждой ячейке прописано значение как текст и свойство ячейки как и задумывалось было:
бластьРезультата.СодержитЗначение = Истина;
ОбластьРезультата.ТипЗначения = Новый ОписаниеТипов(«Строка»);
..
(17) я с этого начинал )
(17) Но не всем клиентам этот апостроф понравился. У них роботы обрабатывают файл и лезут глюки. Пришлось отказаться.
Единственно, что я еще не испытал, это использование макетов в СКД. У меня прайсы формируются через СКД. Потом сохраняются из полученного табличного документа в различные форматы средствами 1С.
(21) тогда, вероятно, если скопировать скдшный вывод в новый табдок, как в (13), то (10) заработает
(22) Пример кода или ссылка есть, как в СКД в макете установить вариант (10) ?
(23) НовыйТабличныйДокумент.Область(а,б,а,б).Текст = «» + Результат.Область(а,б,а,б).Текст
(0) в макете в параметрах ячейки содержит значение = истина, тип значения = строка
(24) (25) Мужики,я ЭТО делал. Попробуйте ПРОГРАММНО сохранить полученный табличный документ в Excel. А потом откройте. И увидите, что там формат Общий, а не Текстовый
(26) наверно только открывать экселькой файл после сохранения и проставлять
(27) От этого я хотел уйти, но пока остановился на этом варианте. При массовом формировании прайсов ожидаю сбоев. Ну, ладно. Посмотрю, что будет на практике.
Попробовал ручками в табличном документе, поставить в ячейке, которая содержит значение 00001,
.СодержитЗначение = Истина;
.Тип = Строка
Потом сохранил в формате Exell и у ячейки получился вполне нормальное значение «00001»
И это радует. Правда не понятно как это сделать в СКД, но хотя бы появился свет в конце туннеля.
(29) задача другая
ТСу (а точнее его заказчикам) нужно (зачем? — хз) чтобы формат ячейки в экселе был не Общий, и Текстовый.
про СодержитЗначение и Тип=Строка я еще в (1) ссылку приводил
(29) Программно в ТабДок это проставить можно и все ОК?
(26) А если программно сразу в Excel писать ?
Текстовый — понятно почему. Если в отчете 1с значение в ячейке табличного документа 0001, то при команде сохранить как Exell значение в ячейке Exell получается 1, с каким то левым форматом типа «00000000». Когда люди делают импорт из Exell, то и получают значение 1 вместо «0001». Это проблема Exell, с которой народ бьется уже лет 10.
Программно в ТабДок ставить можно, но это как-то не кошерно. Хочется в Построителе и в СКД как-то указать для ячейки .СодержитЗначение = Истина не анализируя сам ТабДок
Сохраняйте через Ado,тат тип ячейки можно точно задать.
(33) Свой макет поля должен помочь.
P.S. А еще длинные цифровые коды (типа номеров банковских счетов) превращаются в непотребство типа «1.24Е18». Это к вопросу «зачем».
На самом деле всё проще. В свойствах нужной ячейки в шаблоне поставьте признак «Содержит значение» и тип строка. Тогда при сохранении в Excel, ячейке сразу будет присваиваться тип строка.
(36) Приведи пример кода программной установки в табличный документ при формировании в СКД. Тут уже раза три спрашивал. Сам такого кода не смог родить.
Через использование Excel у меня получилось. Но желание обойтись без него окаянного не прошло.)
Попробовал на своей базе, все прекрасно получилось. В СКД формируется ТабличныйДокумент.
Перед сохранением ТабличногоДокумента в Exell Выполняется код:
ТипСтрока = Новый ОписаниеТипов(«Строка»);
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
ДЛя НомерСтолбца = 1 ПО ТабличныйДокумент.ШиринаТаблицы Цикл
Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца);
ТекТекст = Ячейка.Текст;
Если ТребуетсяПреобразованиеСтрока(ТекТекст) Тогда
//Первый символ «0» или строка содержит «e» и числа ( для «1.24Е18»)
Ячейка.СодержитЗначение = Истина;
Ячейка.ТипЗначения = ТипСтрока;
КонецЕСли;
КонецЦикла;
КонецЦикла;
Вполне возможно этот код выполнять просто после формирования ТабличногоДокумента, но до вывода на эеран. Тогда корректно работать
«Сохранить как»
(38) В какую процедуру ты разместил этот код?
Пока перед сохранением файла. У нас кнопочка сделана «Сохранить в Exell» когда сформирован табличныйДокумент
И еще добавил в Рассылку отчетов, опять же перед сохранением во временный файл
(40) У меня формирование идёт в режиме фонового задания. В интерактивном режиме этой проблемы нет. Меня интересует только программное сохранение. Приведенный код не работает на сервере. У меня не работает. Всё что предлагалось — интерактив. Или я не понял?
У меня тоже рассылка идет в Фоновом режиме.
(42) А формирование файла вручную?
У меня платформа 8.3.9. Может быть, из-за этого?
Я правда не проверил еще в Фоновом режиме 🙂 Но мне кажется должно работать. Там такой-же ТабличныйДокумент и команда ТабличныйДокумент.Записать(. )
У меня 8.3.8.2197
Формирование файла происходит так
табличныйДокумент.Записать(..)
Перед этим прохожу по ячейкам Табличного документа и где надо ставлю
Ячейка.СодержитЗначение = Истина;
Ячейка.ТипЗначения = ТипСтрока;
(45) С кода, который ты привёл, я начинал до сабжа, но у меня при этом формат оставался общим.
Так там хитро, формат остается «общий», но значение не конвертируется в число. Т.е если без преобразования делаешь, то из «0000001» получается формат = «000000000» значение = 1
а с преобразованием получается
формат = «общий» значение = «0000001»
Тоже самое с «1000e10»
без преобразования получается формат «общий» значение 1.00e10
c преобразованием формат «общий» значение «1000e10»
При этом Exell говорит на «0000001» что данная ячейка содержит значение в виде строка, и предлагает изменить его на число
У меня последняя задача была поставлена, чтобы не только значение было строка, но и формат Текстовый. Из-за этого копья ломались )) Через 1С не удалось, поэтому пока работает режим вызова Excel/
Продолжили тестирование, обнаружились некоторые странности. На некоторых артикулах типа «0AA-1BB23456″ не корректно переносилось в Excell, судя по всему в 1С начудили. Пришлось добавить строку в код » Ячейка.Текст = ТекТекст;» и получилось так.
ТипСтрока = Новый ОписаниеТипов(«Строка»);
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
ДЛя НомерСтолбца = 1 ПО ТабличныйДокумент.ШиринаТаблицы Цикл
Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца);
ТекТекст = Ячейка.Текст;
Если ТребуетсяПреобразованиеСтрока(ТекТекст) Тогда
//Первый символ «0» или строка содержит «e» и числа ( для «1.24Е18»)
Ячейка.СодержитЗначение = Истина;
Ячейка.ТипЗначения = ТипСтрока;
Ячейка.Текст = ТекТекст;
КонецЕСли;
КонецЦикла;
КонецЦикла;
И это работает нормально, для нашего полного набора артикулов автозапчастей (где-то в районе 100 тыс шт)
Для себя мы эту тему закрыли.
Как в 1С сохранить табличный документ в excel
Сохранить документ 1С в формате excel можно, если он имеет печатную форму. Сначала нужно вывести печатную форму на экран, нажав на кнопку Печать:

Далее надо нажать на кнопку с дискеткой:

Выбрать папку на компьютере, куда нужно сохранить файл. А также нужный формат файла. Нажать на кнопку Сохранить:

Таким же образом можно сохранять отчеты (например, ОСВ):

В таком случае кнопка с дискетой будет находиться в правом верхнем углу:

Нужно будет заполнить имя файла, а также выбрать нужный формат в следующей форме:

Сохранять в формате Excel можно также списки документов. Для этого любой список надо вывести на экране в табличный документ:

При этом можно отметить галками нужные колонки:

Далее сохранить в нужном формате, нажав на кнопку с дискетой в правом верхнем углу (также, как отчет):
Программная запись в Excel данных и изображений
Из этой записи Вы узнаете 2 самых распространенных способа выгрузки данных в Excel. Мы рассмотрим эффективность и ограничения каждого метода, разберем нюансы записи, затронем некоторые моменты клиент-серверного взаимодействия.
- Выгрузка через Табличный документ
- Выгрузка через Excel
- Итоги
Для анализа способов записи мы создали обработку , которая записывает файл Excel в двух вариантах. Форма обработки показана ниже:

Обработка выполняет запись 3 строк, в каждой строке 5 значений и одна картинка. Код обработки может выполняться как на клиенте, так и на сервере.

Вы можете скачать обработку и ознакомиться с ее работой по ссылке:
Скачать “TNSoft.ru Примеры записи в Excel.epf”
Выгрузка через Табличный документ
Это один из самых простых способов записи в xlsx и xls. В 1С в этом варианте Вы будете работать с объектом ТабличныйДокумент. Ниже показан пример записи в табличный документ, который Вы также можете найти в прилагаемой выше обработке:
&НаКлиенте Процедура ВыполнитьЗаписьЧерезТабличныйДокумент() ТабДок = Новый ТабличныйДокумент; Для СтрокаНомер = 1 По 3 Цикл //Записываем значения строки Для КолонкаНомер = 1 По 5 Цикл Область = ТабДок.Область(СтрокаНомер, КолонкаНомер); Область.Текст = СтрокаНомер * КолонкаНомер; КонецЦикла; //Записываем изображение Область = ТабДок.Область(СтрокаНомер, 6); Область.Картинка = Элементы["Изображение" + СтрокаНомер].Картинка; КонецЦикла; ТипФайла = ТипФайлаТабличногоДокумента.XLSX; //Если запись в формате xls - тип файла ТипФайлаТабличногоДокумента.XLS97 ТабДок.Записать(Каталог + "\Тест.xlsx", ТипФайла); КонецПроцедуры
Плюсы данного метода записи:
- Не нужно устанавливать Excel на клиенте/сервере.
- Не нужно реализовывать масштабирование изображений — Вы устанавливаете только ширину/высоту ячейки.
- Высокая скорость записи т.к. не используется прослойка в виде COMОбъекта.
Минусы:
- Нет возможности устанавливать формулы для ячеек.
- Неконтролируемая конвертация табличного документа в документ Excel. Как пример — могут смещаться изображения.
Замер производительности показывает общее время записи 0,28 сек.

Выгрузка через Excel
В этом варианте запись выполняется с помощью COMОбъекта Excel — устанавливаем соединение с Excel, создаем книгу и размещаем данные на ее листах. Обязательно закрываем книгу и соединение!
&НаКлиенте Процедура ВыполнитьЗаписьЧерезExcel() Эксель = Новый COMОбъект("Excel.Application"); Эксель.DisplayAlerts = 0; Эксель.ScreenUpdating = 0; Эксель.EnableEvents = 0; Книга = Эксель.WorkBooks.Add(); Лист = Книга.WorkSheets(1); Для СтрокаНомер = 1 По 3 Цикл //Записываем значения строки Для КолонкаНомер = 1 По 5 Цикл Лист.Cells(СтрокаНомер, КолонкаНомер).Value = СтрокаНомер * КолонкаНомер; КонецЦикла; //Записываем изображение СтрокаКартинка = Элементы["Изображение" + СтрокаНомер].Картинка; ВременныйФайл = ПолучитьИмяВременногоФайла("" + СтрокаКартинка.Формат()); СтрокаКартинка.Записать(ВременныйФайл); ЛистИзображение = Лист.Shapes.AddPicture(ВременныйФайл, Ложь, Истина, Лист.Cells(СтрокаНомер, 6).Left + 1, Лист.Cells(СтрокаНомер, 6).Top + 1, -1, -1); ЛистИзображение.Placement = 1; ЛистИзображение.LockAspectRatio = 0; //Масштабирование изображения ЛистИзображение.Width = 47; ЛистИзображение.Height = 29; Лист.Rows(СтрокаНомер).RowHeight = 33; ЛистИзображение.Height = 29; УдалитьФайлы(ВременныйФайл); КонецЦикла; ТипФайла = 51; //Если запись в формате xls - тип файла -4143 Книга.SaveAs(Каталог + "\Тест.xlsx", ТипФайла); Попытка Книга.Close(Ложь); Эксель.DisplayAlerts = 1; Эксель.Quit(); Исключение Информация = ИнформацияОбОшибке(); Сообщить(Информация.Описание); КонецПопытки; КонецПроцедуры
Табличный документ в формате Excel программно
Всем привет. Подскажите пожалуйста как программно сохранить табличный документ в файл формата Excel. ТЕ пользователь нажимает печать. формируется печ. форма и сразу сохраняется в формата Excel.
По теме из базы знаний
- Как автоматически заполнить обработкой табличную часть документа «Ввод начальных остатков» (Тип операции = «Расчеты с партнерами»). 1С: ERP
- Универсальная загрузка данных формата Excel
- 1С:Документооборот как прикладное решение оптимизации кадровых бизнес-процессов в организации
- Сохранение данных табличных частей форм в Excel
- Как сохранить любой табличный документ в excel так, чтобы даты сохранились как даты?
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
2. 1cUserAndrew 63 16.03.12 14:16 Сейчас в теме
ТабДокумент.Записать(«С:\ИмяФайла.xls», ТипФайлаТабличногоДокумента.XLS);
user1367144; anosin; se14ine; qu_bert; user1619761; dehro; user817897; Mariya_vrn; CXY; maksa2005; CratosX; dhonid@yandex.ru; SilverFalconi; Olenevod; orfos; ytpyfqrf; Nelli_A86; Afa_fil; rayastar; Vary; Sirchik; Manticor; Baibolaika; Tsprogrammist1; + 24 – Ответить
5. zhuravlev_as 380 07.06.13 14:49 Сейчас в теме
(2) 1cUserAndrew, а в регламентном задании выполняемом на сервере поддерживается имя файла на общедоступной файле на другом кмопе?
6. DenisCh 07.06.13 14:52 Сейчас в теме
(5) apostal86, если у пользователя системы, под которым работает сервер 1с, есть туда права, то да
3. Ezhik5514 16.03.12 14:20 Сейчас в теме
Надо просто записать табличный документ, указав тип файла.
ТабличныйДокумент = Новый ТабличныйДокумент();
ТабличныйДокумент.Записать(«D:\1cv82\Разработка\Excel\1.xls», ТипФайлаТабличногоДокумента.XLS);
Тип: ТипФайлаТабличногоДокумента.
Формат, в котором будет сохранен табличный документ.
Значение по умолчанию: MXL
ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType)
Значения
ANSITXT (ANSITXT)
DOCX (DOCX)
HTML (HTML)
HTML3 (HTML3)
HTML4 (HTML4)
MXL (MXL)
MXL7 (MXL7)
ODS (ODS)
PDF (PDF)
TXT (TXT)
XLS (XLS)
XLS95 (XLS95)
XLS97 (XLS97)
XLSX (XLSX)
qu_bert; user1619761; SilverFalconi; RodinMax; ytpyfqrf; Afa_fil; Vary; SVS-Computers; gradi; Tsprogrammist1; + 10 – Ответить
