1С и Excel. таблица функций Excel доступных из 1С
Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.
Замечание: В Excel разделителем дробной части считается символ ",". Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например ".") на ",". Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С "15.2" отобразится в Excel как "15.фев".
Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка
Эксель= СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
позволит нам получить доступ через переменную "Эксель" к запущенному приложению 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 = Ширина;
|
Задание ширины колонке. |
Лист.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 - тонкая сплошная. |
Постоянный адрес статьи
2008-10-15 в 21:25:35
Огромное спасибо за таблицу;) Очень помогло;)
2009-05-26 в 19:53:42
Кто-нибудь подскажите, почему в строке кода
Лист.cells(сч,5).NumberFormat = "0.000";
Возникает следующая ошибка:
Ошибка при установке значения атрибута контекста (NumberFormat): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range
Лист.cells(сч,5).NumberFormat = "0.000";
по причине:Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range
2009-06-04 в 00:07:26
(2) Исправь точку на запятую: "0,000"
2009-06-24 в 17:51:49
2009-06-03 в 21:07:26 | Юра (анонимно)
(2) Исправь точку на запятую: "0,000"
Спасибо, очень помогло!
2009-07-24 в 11:19:38
скажите пжста как в цвет шрифта установить и цвет фона ячейки !?
везде ищу нигде нет...
2009-07-28 в 20:19:21
//скажите пжста как в цвет шрифта установить и цвет фона ячейки !?
//везде ищу нигде нет...
Interior.ColorIndex (1 - 56)
НашЛист.Cells(1,1).Interior.ColorIndex = 35;
2009-09-04 в 14:57:09
Спасибо за статью! Она оказалась очень полезной.
Вот только не нашел здесь ответ на один очень важный для меня вопрос. Как в excel вставить формулы, чтобы они работали? Теми способами которыми я пробовал, они воспринимались как значения строкового типа и соответственно не работали.
2009-10-30 в 14:36:26
Ошибка при установке значения атрибута контекста (Orientation): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство Orientation класса PageSetup ЛистExcel.PageSetup.Orientati
2010-02-26 в 03:37:03
Ячейка.Value=Номер.АбонНомер;
{Документ.Отчеты.Модуль Документа(15)}: Плохой тип переменной
2010-04-02 в 16:12:50
Ситуация. Нужна выгрузка в Excel из 1С:, причем структура (состав и формат ячеек) файла Excel заранее известна.
Возможно ли формирование новых строк файла Excel копированием пустой строки (с заранее определенным форматом и атрибутами всех ячеек) с последующим заполнением этой новой строки значениями данными из "1С:"? Спасибо.
2010-05-09 в 15:10:09
Всем Привет!
Не подскажет кто, как программно из 1С
удалить лист в Excel версии выше 97?
В 97 проходит:
q.Worksheets(i).Delete();
(
где i - номер страницы для удаления, q - книга Excel:
Эксель=СоздатьОбъект("Excel.Application");
q=Эксель.WorkBooks.Add();
)
2010-08-08 в 18:49:46
Как после всех операци с Excel выгрузить его из памяти попросту закрыть. А то если видемость ставим 0 то все только через диспечера можно закрыть.
2010-09-06 в 08:40:26
Подскажите пожалуйста, как из 1С закрыть только рабочую книгу в экселе, если открыто несколько книг? Потому что при закрытии закрываются все книги сразу (рабочая и все остальные которые открыты)
2010-11-19 в 12:40:15
Подскажите пожалуйста как вставить примечание.
2010-11-25 в 18:08:16
Здравствуйте. Поделитесь подобной таблицей для работы с Word.Application
Спасибо.
2011-04-20 в 20:24:50
2011-10-20 в 09:13:15
Доброго времени суток! Подскажите, пожалуйста, как удалить текст из таблицы в документе MS WORD.
Предистория: Нужно из 1С выводить в документ Word текст письма, который храниться в комментарии. Я создал шаблон Word, такого вида:
//колонтитул
текст
абзац1
...
абзац15
подпись
//Колонтитул
абзацы и подпись находятся в таблице. все заполняется, все хорошо, но письма разные бывают (большие и маленькие). Если письмо большое - все нормально, если письмо короткое, то часть абзацев приходится менять на пустой символ ("") и тогда между текстом и письмом появляется большой пробел, приходится открывать документ и удалять лишние строки. Хотелось бы выяснить как убрать пустые строки из ячейки таблицы. Заранее благодарен.
2011-10-20 в 09:39:26
Сам проблему и решил.
Если кому-то будет полезно:
ActiveDocument.Tables(НомерТаблицы).Cell(НомерСтроки,НомерСтолбца).Range.Text =
СокрП(Сред(ActiveDocument.Tables(НомерТаблицы).Cell(НомерСтроки,НомерСтолбца).Range.Text, 1 , СтрДлина(ActiveDocument.Tables(НомерТаблицы).Cell(НомерСтроки,НомерСтолбца).Range.Text)-1));
Я взял текст из ячейки таблицы и функцией 1С убрал незначащие символы справа и присвоил значению Text всё той же ячейки и все стало гуд.
2011-10-28 в 21:45:11
Sheet.Columns("D:D").Select();
R = Sheet.Columns("D:D");
R.NumberFormat = "0.00";
при выполнении выдает
{Отчет.Salary.Форма.Модуль(275)}: Microsoft Office Excel: Нельзя установить свойство NumberFormat класса Range, не могу понять в чем дело, по Вашим рекомендациям Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат; работает, а как задать формат, "## #0.00" я тоже пробовал
2011-11-06 в 19:53:00
Установлен Офис - для некомм. использования.
Может поэтому не открываться Эксель ?
"Неудачная попытка создания объекта (Excel.Application)".
Если можно, продублируйте на майл : a904@ya.ru. На сайте не бываю.
2011-11-10 в 14:46:29
Здравствуйте!!!Помогите пожалуйста- я начала работу в 1с с нуля (скачала с интер) вела наименов товара, цену и кол-во в номенклатуре, как мне посмотреть остатки???
заранее спасибо!!
2012-03-25 в 02:39:48
Привет, а кто нибудь может подсказать, как раскрасить строки таблицы word?
2012-03-26 в 14:29:20
Добрый день, не подскажите, как можно обратиться к объекту типа рисунок,находящемуся на данном листе эксель? Нужно затем выделить и копировать объект..
2012-04-24 в 12:43:53
Подскажите, как задать группировку строк.
2014-07-29 в 12:33:11
Доброе время суток) Подскажите, кто если заходит на эту страницу, как сделать чтобы данные из экселя срвнивать с 1с 7.7. Вообще это возможно? В таблице эксель есть ФИО, должность... Пробовал по Фио сравнить, ошибок не выдает, но и результатов нужных тоже нет((
Вот код... мучаюсь ужей ниделю(
Процедура Сформировать()
Таб=СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Таб.ВывестиСекцию("Таблица");
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
MsExel = СоздатьОбъект("Excel.Application");
MsExel.Application.Workbooks.Open("C:\Documents and Settings\User\Рабочий стол\Лист Microsoft Excel (3)");
КоличествоЛистов = MsExel.Sheets.Count;
Сообщить(КоличествоЛистов);
Лист=MsExel.WorkSheets("321");
СчетчикЦикла=20;
ВсегоКолонок=Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок=Лист.Cells(1,1).SpecialCells(11).Row;
Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока СчетчикЦикла
2014-08-07 в 01:15:51
Чего то код не полностью. Попробуйте продолжение кода запостить и поподробнее что именно у вас не получается?