1с заполнение шаблона excel

Обновлено: 03.07.2024

Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.

Обмен через табличный документ

Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:

  • Записать (< ИмяФайла >, < ТипФайлаТаблицы >) для выгрузки данных в файл;
  • Прочитать (< ИмяФайла >, < СпособЧтенияЗначений >) для загрузки данных из файла.

Внимание!

Метод Записать () доступен как на клиенте, так и на сервере. Метод Прочитать () доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.

Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:

ТабДок . Записать ( ПутьКФайлу , ТипФайлаТабличногоДокумента . XLSX );

Загрузка из файла осуществляется также достаточно просто:

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

Обмен через OLE

Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:

  • На компьютере конечного пользователя, если обмен происходит на стороне клиента;
  • На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.

Пример выгрузки:

Примеры чтения:

Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:

Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:

ВсегоКолонок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Column ;
ВсегоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;

Область = Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок ));
Данные = Область . Value . Выгрузить ();

В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:

Для того, чтобы узнать какое свойство нужно менять или какой метод вызвать можно воспользоваться макросами Excel. Если записать макрос с требуемыми действиями, то после можно посмотреть программный код на VBA записанного макроса.

Использование COMSafeArray

Обмен через ADO

Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.

Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.

Пример выгрузки:

Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:

В приведенном примере в методе

во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:

Пример чтения:

В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:

В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:

  • Connection;
  • Command;
  • Recordset;
  • Record;
  • Fields;
  • Stream;
  • Errors;
  • Parameters;
  • Properties.

Выгрузка без программирования

Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.

Сохранение табличного документа 1С

В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.

Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:

Сохранение динамического списка

Остались вопросы?
Спросите в комментариях к статье.

Распечатать

Запрос по вхождению искомой строки в наименования элементов справочника  0
В данной статье я расскажу вам как быстро найти в справочнике элементы у которых в наименовании присутствует вхождение искомой нами строки: Текст запроса будет выглядеть так: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка Как сформировать отчет СКД без проверки прав (в привилегированном режиме)?  20
Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав! Особенно если настроен RLS Есть несколько способов как это сделать: 1. Установить привилегированный режим в модул Оператор ПОДОБНО  18
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все результаты поиска похожих

Еще в этой же категории

Как сформировать документ в Word из 1С? (Active Document)  14
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _ Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа: 1. Путем замены шаблонного текста в макете Wordа. 2. Путем вставки текста с помощью закладок в Wo Как в excel сохраненный из 1С вставить новый лист?  13
Я думаю, все сталкивались с однолистовым excel файлом из 1С, у которого на первый взгляд, нет возможности добавить листы. Все не так страшно - их просто скрыли или, что чаще всего - даже не отображали (обусловлено созданием файла из стороннего прил Экспорт и Импорт данных 1С - Microsoft Excel  12
Экспорт Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка; Процедура Основ Преобразование XLS в MXL  10
Конвертация таблиц из Excel в MXL - скачать Converter Excel v MXL: Для 8.х - Для 7.7 - // Выбор файла Microsoft Excel Procedure FileNameStartChoice(Element, StdProcessing) StdProcessing = False; DialogFile = New FileDialog(FileDialogMode. Выгрузка данных в Excel с установкой разных параметров  9
// Процедура выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel // с указанным именем, используя преобразование данных к типу число и типу строка; Процедура ОсновныеДействияФормыЭкспорт(Кнопка) Попытка Посмотреть все в категории Работа с Microsoft Office и OpenOffice

Требуется: Заполнить готовую книгу Excel с кучей формул и форматированием из 1С.

Решение: Просматриваем из 1С все листы, и в ячейки с примечаниями (комментариями) записываем результат формулы, указанные в этих же ячейках.

Т.е. нашли ячейку с примечанием - прочитали в ней выражение, вычислили с помощью 1С, и записали обратно в ячейку.


Перебор ячеек с примечаниями - только чтобы ускорить просмотр книги, не перебирать все ячейки в ней.

Текст примера под катом, функция ЗначениеПоказателя () и переменная ФайлШаблона - в фрагменте не описаны.

//
Excel = СоздатьОбъект( "Excel.Application" ) ;
Excel . Visible = 1;
Excel . DisplayAlerts = 0;

Д = Excel . Workbooks . Add ( ФайлШаблона ) ;

Для К = 1 по Д . Sheets . Count Цикл

Л = Д . Sheets ( К ) ; // текущий лист

ВсегоКомментариев = Л . Comments . Count ; // комментариев на листе

Для сч = 1 По ВсегоКомментариев Цикл

Состояние( "Заполнение " + Л . Name +" " +Цел( 100- сч / ВсегоКомментариев * 100 )+ "%" ) ;
// текст коментария, в книге только служебные
Стр = Л. Comments ( сч ) . Text () ;

// прочитаем ячейку
ИмяПоказателя = СокрЛП ( Л . Comments ( сч ) . Parent . Value ) ;

// и сразу запишем в нее результа
Л . Comments ( сч ) .Parent . Value = ЗначениеПоказателя ( ИмяПоказателя ) ;

КонецЦикла ; // по комментариям

КонецЦикла ; // по листам

ИмяФайла = ""+ Формат(РабочаяДата() ,"DГГГГММДД" )+ "_" + _шаблон+".xlsx";

Д . SaveAs (СокрЛП(Константа . КаталогЭкспортаДанных ) +"\"+ ИмяФайла ) ;

// удалим все комментарии в результирующем файле, чтобы не мешали
Для К = 1 по Д . Sheets . Count Цикл
Л = Д . Sheets ( К ) ; // текущий лист
КвоКомментариев = Л . Comments . Count ; // комментариев на листе
Пока КвоКомментариев > 0 Цикл
Л . Comments ( КвоКомментариев ) . Delete () ;
КвоКомментариев = КвоКомментариев - 1;
КонецЦикла ; // по комментариям
КонецЦикла ; // по листам

Довольно много примеров формирования excel файлов из 1С. Самый простой способ сформировать mxl таблицу и сохранить как xls.

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

Сразу хочется воспользоваться привычными из 1С методами: вывести секцию на основании заранее оформленного шаблона.

(Самый быстрый вариант заполнения отформатированного excel файла это заполнение шаблона с помощью макроса которому передаются причесанные данные, но для этого надо знать VBA, пожалуста дайте ссылку на такой пример.)

Насколько я знаю в excel секций нет, но есть именованные области.

Вместо задания имен областей в шаблон файла я добавил отдельную закладку "ПараметрыШаблона" и оттуда беру номера начальной строки секции, и количество строк в ней.

параметры шаблона

команда excel ДиапозонИсточник.Copy(ДиапозонПриемник) переносит все оформление и формулы выбранных ячеек, осталось только подставить значения из 1с. чтобы различить постоянный текст и значения для подставновки я использую угловые скобки в которых пишу выражения 1С. Заполнение ячеек в коде 1С выглядит так:

формулы в шаблоне лучше писать в формате относительных ссылок RC: ReferenceStyle = 0 - тогда можно копировать формулу подсчета суммы в строке из шаблонной строки табличной части.

Когда мы открываем новую книгу на основании шаблона в нее переходят макросы из шаблона:

Если нам нужен только один лист -он уже есть в новой книге, осталось удалить строки шаблона --ширина колонок уже настроенна.

В прикрепленном архиве лежат:

обарботка ПакЛист_ОБИ_xls.epf -- для 8.2, обычные оформы, проверялась работа на УТ 10.3

Внешняя печатная форма ПакЛист_ОБИ_xls.ert -- для 7.7 ТиС 9.2 (компл 4.X)

Я не смог по 7.7 отключить вопросы по сохранеию изменений шаблона -- буду рад советам, как этот вопрос отключить.

Подскажите, как присвоить имя по умолчанию еще не сохраненному файлу excel?

Читайте также: