1с заполнение шаблона excel
Существует несколько способов программной работы с файлами 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 без программирования.
В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.
Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:
Остались вопросы?
Спросите в комментариях к статье.
Запрос по вхождению искомой строки в наименования элементов справочника 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?
Читайте также: