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 - тонкая сплошная. |
Постоянный адрес статьи
Еще записи по теме
- Патентный поиск
- Юридический консалтинг в помощь бизнесмену
- 5 шагов по контролю мошенничества в организации
- Работа рекламных агентств
- Программа 1С: Бухгалтерия Предприятия 8 - идеальное решение для бухгалтера любого уровня квалификации
- История и развитие компании 1С. Бухгалтерия Предприятия 8
- Кредиты «До Зарплаты» В США
Комментариев: 24
Огромное спасибо за таблицу
Очень помогло
Кто-нибудь подскажите, почему в строке кода
Лист.cells(сч,5).NumberFormat = "0.000";
Возникает следующая ошибка:
Ошибка при установке значения атрибута контекста (NumberFormat): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range
Лист.cells(сч,5).NumberFormat = "0.000";
по причине:Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range
(2) Исправь точку на запятую: "0,000"
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.Orientation = 1;
Ячейка.Value=Номер.АбонНомер;
{Документ.Отчеты.Модуль Документа(15)}: Плохой тип переменной
Ситуация. Нужна выгрузка в Excel из 1С:, причем структура (состав и формат ячеек) файла Excel заранее известна.
Возможно ли формирование новых строк файла Excel копированием пустой строки (с заранее определенным форматом и атрибутами всех ячеек) с последующим заполнением этой новой строки значениями данными из "1С:"? Спасибо.
Всем Привет!
Не подскажет кто, как программно из 1С
удалить лист в Excel версии выше 97?
В 97 проходит:
q.Worksheets(i).Delete();
(
где i - номер страницы для удаления, q - книга Excel:
Эксель=СоздатьОбъект("Excel.Application");
q=Эксель.WorkBooks.Add();
)
Как после всех операци с Excel выгрузить его из памяти попросту закрыть. А то если видемость ставим 0 то все только через диспечера можно закрыть.
Подскажите пожалуйста, как из 1С закрыть только рабочую книгу в экселе, если открыто несколько книг? Потому что при закрытии закрываются все книги сразу (рабочая и все остальные которые открыты)
Подскажите пожалуйста как вставить примечание.
Здравствуйте. Поделитесь подобной таблицей для работы с Word.Application
Спасибо.
Для MS Word:
Ну, табличку составлять у мя времени нет, а вот кодом поделюсь.
Процедура Сформировать()
//Попытка запуска приложения
Попытка
Application=СоздатьОбъект("Word.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Сообщить("Возможно, MS Word не установлен на этом компьютере.");
Возврат;
КонецПопытки;
// , , DocumentType:=0
//Создание листа документа
Application.Documents.Add();
WorkBook=Application.ActiveDocument;
//Получение окна
Window=WorkBook.Windows(1);
//Установка невидимости окна для убыстрения вывода
Window.Visible=1;
//не выдавать предупреждений
Application.DisplayAlerts=0;
//Установка ориентации листа
WorkBook.PageSetup.Orientation = 0;
//Это портретная, альбомная 1
//Установка размера полей
WorkBook.PageSetup.TopMargin = 28; //Размер в поинтах, 1 СМ=28pt
WorkBook.PageSetup.BottomMargin = 28;
WorkBook.PageSetup.LeftMargin = 28;
WorkBook.PageSetup.RightMargin = 28;
//Установка высоты колонтитулов
WorkBook.PageSetup.HeaderDistance = 28; //Размер в поинтах, 1 СМ=28pt
WorkBook.PageSetup.FooterDistance = 28;
//Установка зеркальных полей
WorkBook.PageSetup.MirrorMargins = False;
//Установка параметров абзаца
Application.Selection.ParagraphFormat.LeftIndent = 10;//Абзац, отступ слева
Application.Selection.ParagraphFormat.RightIndent = 10;//Абзац, отступ Справа
Application.Selection.ParagraphFormat.SpaceBefore = 10;//Отступ до абзаца
Application.Selection.ParagraphFormat.SpaceBeforeAuto = False; //не автомат
Application.Selection.ParagraphFormat.SpaceAfter = 10;//Отступ после абзаца
Application.Selection.ParagraphFormat.SpaceAfterAuto = False;//не автомат
Application.Selection.ParagraphFormat.LineSpacingRule = 1;//Междустрочный интервал 0-одинарный,1-полуторный,2-двойной
Application.Selection.ParagraphFormat.FirstLineIndent = 28;//Отступ первой строки абзаца
Application.Selection.ParagraphFormat.Alignment = 3;//Выравнивание 0-по левому краю, 1-по центру, 2-по правому краю, 3-по ширине
//Установка шрифта для печати
Application.Selection.Font.Name = "Times New Roman";
Application.Selection.Font.Size = 14;
//Ввод текста
Application.Selection.TypeText("Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. И так далее... ");
Application.Selection.TypeText("Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. И так далее... ");
Application.Selection.TypeText("Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. И так далее... ");
//Ввод абзаца
Application.Selection.TypeParagraph();
//Ввод текста
Application.Selection.Font.Name = "Courier New";
Application.Selection.Font.Size = 14;
Application.Selection.TypeText("Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. И так далее... ");
Application.Selection.Font.Bold = 1;
Application.Selection.TypeText("Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. И так далее... ");
Application.Selection.Font.Bold = 0;
Application.Selection.TypeText("Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. Просто текст. И так далее... ");
Application.Selection.TypeParagraph();
//Запись и форматирование верхнего колонтитула
WorkBook.Sections(1).Headers(1).Range.ParagraphFormat.Alignment = 2;
WorkBook.Sections(1).Headers(1).Range.Font.Name = "Times New Roman";
WorkBook.Sections(1).Headers(1).Range.Font.Bold = 1;
WorkBook.Sections(1).Headers(1).Range.Font.Size = 8;
WorkBook.Sections(1).Headers(1).Range.Font.Size = 8;
WorkBook.Sections(1).Headers(1).Range.Text="Верхний колонтитул";
//Запись и форматирование нижнего колонтитула
WorkBook.Sections(1).Footers(1).Range.ParagraphFormat.Alignment = 0;
WorkBook.Sections(1).Footers(1).Range.Font.Name = "Times New Roman";
WorkBook.Sections(1).Footers(1).Range.Font.Italic = 1;
WorkBook.Sections(1).Footers(1).Range.Font.Size = 8;
WorkBook.Sections(1).Footers(1).Range.Font.Size = 8;
WorkBook.Sections(1).Footers(1).Range.Text="Нижний колонтитул";
//Вставка и форматирование таблицы
WorkBook.Tables.Add(WorkBook.Paragraphs(Workbook.Paragraphs.Count()).Range,3,2);
WorkBook.Tables(1).Range.Select();
Application.Selection().Style = "Сетка таблицы";
Application.Selection.Tables(1).Columns(1).Width = 97.55;
Application.Selection.Tables(1).Columns(2).Width = 446.5;
Application.Selection.ParagraphFormat.LeftIndent = 0;//Абзац, отступ слева
Application.Selection.ParagraphFormat.RightIndent = 0;//Абзац, отступ Справа
Application.Selection.ParagraphFormat.SpaceBefore = 3;//Отступ до абзаца
Application.Selection.ParagraphFormat.SpaceBeforeAuto = False; //не автомат
Application.Selection.ParagraphFormat.SpaceAfter = 0;//Отступ после абзаца
Application.Selection.ParagraphFormat.SpaceAfterAuto = False;//не автомат
Application.Selection.ParagraphFormat.LineSpacingRule = 0;//Междустрочный интервал 0-одинарный,1-полуторный,2-двойной
Application.Selection.ParagraphFormat.FirstLineIndent = 0;//Отступ первой строки абзаца
Application.Selection.ParagraphFormat.Alignment = 1;//Выравнивание 0-по левому краю, 1-по центру, 2-по правому краю, 3-по ширине
//Заполнения таблицы
WorkBook.Tables(1).Cell(1,1).Range.Font.Name = "Times New Roman";
WorkBook.Tables(1).Cell(1,1).Range.Font.Size = 8;
WorkBook.Tables(1).Cell(1,1).Range.Font.Bold = 1;
WorkBook.Tables(1).Cell(1,1).Range.Text = "Это первая строка, первая колонка";
WorkBook.Tables(1).Cell(1,1).Range.Font.Name = "Times New Roman";
WorkBook.Tables(1).Cell(1,1).Range.Font.Size = 8;
//Форматирование ячейки таблицы
WorkBook.Tables(1).Cell(1,2).Range.Font.Name = "Times New Roman";
WorkBook.Tables(1).Cell(1,2).Range.Font.Size = 8;
WorkBook.Tables(1).Cell(1,2).Range.Font.Bold = 1;
//Вставка таблицы в ячейку
WorkBook.Tables(1).Cell(1,2).Range.Select();
Application.Selection.TypeParagraph();
//Application.Selection.TypeParagraph();
//Application.Selection.TypeParagraph();
//Application.Selection.TypeParagraph();
WorkBook.Tables(1).Cell(1,2).Range.Select();
Application.Options.DefaultBorderLineStyle=2;
qwer=Application.ActiveDocument.Tables.Add(Application.Selection().Range,3,9,9);
qwer.Range.Select();
Application.Selection().Borders.InsideLineStyle=2;
//WorkBook.Tables(2).Cell(1,1).Range.Font.Name = "Times New Roman";
//WorkBook.Tables(2).Cell(1,1).Range.Font.Size = 8;
//WorkBook.Tables(2).Cell(1,1).Range.Font.Bold = 1;
//WorkBook.Tables(2).Cell(1,1).Range.Text = "Это полная херня";
//Application.Selection.MoveDown(7,7);
////***************************************
//Application.Selection.TypeParagraph();
//
//WorkBook.Tables.Add(WorkBook.Paragraphs(Workbook.Paragraphs.Count()).Range,3,2);
//WorkBook.Tables(2).Range.Select();
//Application.Options.DefaultBorderLineStyle=2;
//Application.Selection().Borders.InsideLineStyle=2;
////Application.Selection().Style = "Сетка таблицы";
//
//Application.Selection.Tables(1).Columns(1).Width = 97.55;
//Application.Selection.Tables(1).Columns(2).Width = 446.5;
////
//Application.Selection.ParagraphFormat.LeftIndent = 0;//Абзац, отступ слева
//Application.Selection.ParagraphFormat.RightIndent = 0;//Абзац, отступ Справа
//Application.Selection.ParagraphFormat.SpaceBefore = 3;//Отступ до абзаца
//Application.Selection.ParagraphFormat.SpaceBeforeAuto = False; //не автомат
//Application.Selection.ParagraphFormat.SpaceAfter = 0;//Отступ после абзаца
//Application.Selection.ParagraphFormat.SpaceAfterAuto = False;//не автомат
//Application.Selection.ParagraphFormat.LineSpacingRule = 0;//Междустрочный интервал 0-одинарный,1-полуторный,2-двойной
//Application.Selection.ParagraphFormat.FirstLineIndent = 0;//Отступ первой строки абзаца
//Application.Selection.ParagraphFormat.Alignment = 1;//Выравнивание 0-по левому краю, 1-по центру, 2-по правому краю, 3-по ширине
//
//////Заполнения таблицы
//WorkBook.Tables(2).Cell(1,2).Range.Font.Name = "Times New Roman";
//WorkBook.Tables(2).Cell(1,2).Range.Font.Size = 8;
//WorkBook.Tables(2).Cell(1,2).Range.Font.Italic = 1;
//WorkBook.Tables(2).Cell(1,2).Range.Text = "Это первая строка, вторая колонка";
Application.Visible=1;
Window.Visible=1;
КонецПроцедуры
Доброго времени суток! Подскажите, пожалуйста, как удалить текст из таблицы в документе MS WORD.
Предистория: Нужно из 1С выводить в документ Word текст письма, который храниться в комментарии. Я создал шаблон Word, такого вида:
//колонтитул
текст
абзац1
...
абзац15
подпись
//Колонтитул
абзацы и подпись находятся в таблице. все заполняется, все хорошо, но письма разные бывают (большие и маленькие). Если письмо большое - все нормально, если письмо короткое, то часть абзацев приходится менять на пустой символ ("") и тогда между текстом и письмом появляется большой пробел, приходится открывать документ и удалять лишние строки. Хотелось бы выяснить как убрать пустые строки из ячейки таблицы. Заранее благодарен.
Сам проблему и решил.
Если кому-то будет полезно:
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с с нуля (скачала с интер) вела наименов товара, цену и кол-во в номенклатуре, как мне посмотреть остатки???
заранее спасибо!!
Привет, а кто нибудь может подсказать, как раскрасить строки таблицы word?
Добрый день, не подскажите, как можно обратиться к объекту типа рисунок,находящемуся на данном листе эксель? Нужно затем выделить и копировать объект..
Подскажите, как задать группировку строк.