Консультант по 1С в Крыму. +7(978)857-2035

Помогу с 1С!

программист 1С Симферополь

Позвоните:
+7(978)857-2035

1С и Excel. таблица функций Excel доступных из 1С

/ Просмотров: 199525

Многие знают, что 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.фев".

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, код

Попытка
Эксель= СоздатьОбъект("Excel.Application");
Исключение

Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;

КонецПопытки;

позволит нам получить доступ через переменную "Эксель" к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.

Открытие книги (файла):

Книга=Эксель.WorkBooks.Open(ПутьКФайлу);

ПутьКФайлу - полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:

Лист=Книга.WorkSheets(НомерЛиста);

или

Лист=Книга.WorkSheets(ИмяЛиста);

НомерЛиста - номер листа в книге, ИмяЛиста - имя листа в книге.

Получение значения ячейки листа:

Значение=Лист.Cells(НомерСтроки,НомерКолонки).Value;

НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения нужных действий добавлять кодЭксель.Quit();, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в 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 - тонкая сплошная.

Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm

Комментариев: 26 RSS
Дмитрий1
2008-10-15 в 21:25:35

Огромное спасибо за таблицу;) Очень помогло;)

Александр2
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-03 в 21:07:26 | Юра (анонимно)

(2) Исправь точку на запятую: "0,000"

Спасибо, очень помогло!

скажите пжста как в цвет шрифта установить и цвет фона ячейки !?

везде ищу нигде нет...

//скажите пжста как в цвет шрифта установить и цвет фона ячейки !?

//везде ищу нигде нет...

Interior.ColorIndex (1 - 56)

НашЛист.Cells(1,1).Interior.ColorIndex = 35;

Спасибо за статью! Она оказалась очень полезной.

Вот только не нашел здесь ответ на один очень важный для меня вопрос. Как в excel вставить формулы, чтобы они работали? Теми способами которыми я пробовал, они воспринимались как значения строкового типа и соответственно не работали.

Ошибка при установке значения атрибута контекста (Orientation): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство Orientation класса PageSetup ЛистExcel.PageSetup.Orientati

Ячейка.Value=Номер.АбонНомер;

{Документ.Отчеты.Модуль Документа(15)}: Плохой тип переменной

Евгений10
2010-04-02 в 16:12:50

Ситуация. Нужна выгрузка в Excel из 1С:, причем структура (состав и формат ячеек) файла Excel заранее известна.

Возможно ли формирование новых строк файла Excel копированием пустой строки (с заранее определенным форматом и атрибутами всех ячеек) с последующим заполнением этой новой строки значениями данными из "1С:"? Спасибо.

Всем Привет!

Не подскажет кто, как программно из 1С

удалить лист в Excel версии выше 97?

В 97 проходит:

q.Worksheets(i).Delete();

(

где i - номер страницы для удаления, q - книга Excel:

Эксель=СоздатьОбъект("Excel.Application");

q=Эксель.WorkBooks.Add();

)

Как после всех операци с Excel выгрузить его из памяти попросту закрыть. А то если видемость ставим 0 то все только через диспечера можно закрыть.

Подскажите пожалуйста, как из 1С закрыть только рабочую книгу в экселе, если открыто несколько книг? Потому что при закрытии закрываются все книги сразу (рабочая и все остальные которые открыты)

Алексей17
2011-10-20 в 09:13:15

Доброго времени суток! Подскажите, пожалуйста, как удалить текст из таблицы в документе MS WORD.

Предистория: Нужно из 1С выводить в документ Word текст письма, который храниться в комментарии. Я создал шаблон Word, такого вида:

//колонтитул

текст

абзац1

...

абзац15

подпись

//Колонтитул

абзацы и подпись находятся в таблице. все заполняется, все хорошо, но письма разные бывают (большие и маленькие). Если письмо большое - все нормально, если письмо короткое, то часть абзацев приходится менять на пустой символ ("") и тогда между текстом и письмом появляется большой пробел, приходится открывать документ и удалять лишние строки. Хотелось бы выяснить как убрать пустые строки из ячейки таблицы. Заранее благодарен.

Алексей18
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 всё той же ячейки и все стало гуд.

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" я тоже пробовал

Установлен Офис - для некомм. использования.

Может поэтому не открываться Эксель ?

"Неудачная попытка создания объекта (Excel.Application)".

Если можно, продублируйте на майл : a904@ya.ru. На сайте не бываю.

Здравствуйте!!!Помогите пожалуйста- я начала работу в 1с с нуля (скачала с интер) вела наименов товара, цену и кол-во в номенклатуре, как мне посмотреть остатки???

заранее спасибо!!

Дмитрий22
2012-03-25 в 02:39:48

Привет, а кто нибудь может подсказать, как раскрасить строки таблицы word?

Добрый день, не подскажите, как можно обратиться к объекту типа рисунок,находящемуся на данном листе эксель? Нужно затем выделить и копировать объект..

Доброе время суток) Подскажите, кто если заходит на эту страницу, как сделать чтобы данные из экселя срвнивать с 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;

Спр=СоздатьОбъект("Справочник.Сотрудники");

Спр.ВыбратьЭлементы();

Пока СчетчикЦикла

Чего то код не полностью. Попробуйте продолжение кода запостить и поподробнее что именно у вас не получается?

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)