Запись данных в файл Excel в 1С программно через com
Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.
На сайте 1С (www.1C.ru) есть полезная программка, которая дает возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу 1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет необходимости.
Полная информация о программе находится здесь.
Скачать программу можно здесь (архив zip 682 739 байт).
Замечание: В Excel разделителем дробной части считается символ ",". Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например ".") на ",". Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С "15.2" отобразится в Excel как "15.фев".
Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка Эксель = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); Возврат; КонецПопытки; Книга = Эксель.WorkBooks.Add();
позволит нам получить доступ через переменную "Эксель" к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.
//Открытие книги (файла): Книга = Эксель.WorkBooks.Open(ПутьКФайлу); ПутьКФайлу - полный путь к файлу книги Excel. //Выбор листа книги для работы с ним: Лист = Книга.WorkSheets(НомерЛиста); или Лист = Книга.WorkSheets(ИмяЛиста); //НомерЛиста - номер листа в книге, ИмяЛиста - имя листа в книге. //Получение значения ячейки листа: Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value; //НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Попытка Эксель = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); Возврат; КонецПопытки; Книга = Эксель.WorkBooks.Add(); //Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа: Лист = Книга.WorkSheets(НомерЛиста); //либо добавить в книгу новый лист, если необходимо: Лист = Книга.Sheets.Add(); //Следующим шагом будет установка значения ячейки: Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; //НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка. //И в конце нужно произвести запись созданной книги: Попытка Книга.SaveAs(ПутьКФайлу); Исключение Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); Возврат; КонецПопытки; //ПутьКФайлу - полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов \ / : * ? " > < |.
Часто используемые методы для чтения/установки значений в Excel.
Эксель = СоздатьОбъект("Excel.Application"); | Получение доступа к приложению Excel. |
Эксель.Visible = Видимость; | 0 - Excel не виден, 1 - виден. |
Книга = Эксель.WorkBooks.Add(); | Создание новой книги (файла) Excel. |
Книга.SaveAs(ИмяФайла); | Сохранение книги Excel. |
Лист = Книга.WorkSheets.Add(); | Добавление нового листа в книгу. |
Книга = Эксель.WorkBooks.Open(ИмяФайла); | Открытие существующей книги (файла) Excel. |
Лист = Книга.WorkSheets(НомерЛиста); | Установка листа в качестве рабочего с номером НомерЛиста. |
Лист.Name = ИмяЛиста; | Задание рабочему листу имени ИмяЛиста |
Лист.PageSetup.Zoom = Масштаб; | Задание параметра страницы "Масштаб" (от 10 до 400). |
Лист.PageSetup.Orientation = Ориентация; | Ориентация: 1 - книжная, 2 - альбомная. |
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание левой границы (в сантиметрах). |
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание верхней границы (в сантиметрах). |
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание правой границы (в сантиметрах). |
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры); | Задание нижней границы (в сантиметрах). |
Лист.Columns(НомерКолонки).ColumnWidth = Ширина; | Задание ширины колонке. |
ПриложениеExcel.Worksheets(ИмяЛиста).Range("A1:E1").Font.Bold = True; | Установка жирный шрифт в диапазоне ячеек |
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение; | Ввод данных в ячейку. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта; | Установка шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта; | Установка размера шрифта в ячейке. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный; | 1 - жирный шрифт, 0 - нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив; | 1 - наклонный шрифт, 0 - нормальный. |
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый; | 2 - подчеркнутый, 1 - нет. |
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; | Установка формата данных ячейки. |
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии; | Установка рамок ячейки. 1 - тонкая сплошная. |
Пример:
ПриложениеExcel = Новый COMОбъект("Excel.Application"); ПриложениеExcel.DisplayAlerts = 0; ПриложениеExcel.Visible = 0; ПриложениеExcel.SheetsInNewWorkbook = 2; КнигаExcel = ПриложениеExcel.Workbooks.Add(); Листы = КнигаExcel.Sheets; Пока Листы.Count < 3 Цикл Листы.Add(); КонецЦикла; //Создаем шапку лист1 Лист1 = КнигаExcel.Sheets(1); Лист1.Name = "Products"; //Создаем шапку таблицы Лист1.Cells(1,1).Value = "Номенклатура"; // Создаем строки таблицы Строка = Строка + 1; Лист1.Cells(Строка,1).Value = "Телевизор Samsung 43"; // Сохраняем документ КнигаExcel.SaveAs("C:\Номенклатура.xls", -4143); ПриложениеExcel.Quit(); Сообщить("Запись окончена");