МегаСофт: Форум 1С МегаСофт: Форум 1С
На нашем форуме обсуждаются темы, связанные с 1С:Предприятие. Настройка и сопровождение, доработка и автоматизация. Задавайте любые вопросы, связанные с 1С.
 Помощь      Поиск      Пользователи


 Страниц (1)  ОтветитьНовая тема

> Описание: Передача и получение данных в (из) Microsoft Excel
master
Отправлено: 14 Декабря, 2007 - 22:18:09
Ответить с цитированием Цитирование


Администратор


Top offline

Сообщений: 45  
Регистрация: Нояб. 2007  
Карма: 0
Поощрить/Наказать




Таблицы 1С и Таблицы Excel
Несмотря на то, что выгрузка данных из 1С в Excel является стандартной процедурой, необходимо помнить ряд особенностей. Например, в Excel разделителем дробной части считается символ ",", поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например ".") на ",", иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в информация в таблице 1С "12.2" будет воспринята Excel как "12.фев".

Получение данных из Excel
Процедура получения данных из Excel производится с помощью технологии OLE(Object Linking and Embedding). Разобъем всю процедуру на отдельные этапы:
1. Открытие приложения Excel для передачи значений:
Код:
Попытка
    Эксель = СоздатьОбъект("Excel.Application");  
Исключение
    Сообщить(ОписаниеОшибки() + "Не удается произвести запуск Excel!");  
    Возврат;
КонецПопытки;

Это действие позволит позволит нам получить доступ через переменную "Эксель" к запущенному приложению Excel.
2. Далее можно получить доступ к книге , листу и ячейке с данными:
Код:
Книга = Эксель.WorkBooks.Open(<ПутьКФайлу>);
Лист = Книга.WorkSheets(<НомерЛиста>);
Лист = Книга.WorkSheets(<ИмяЛиста>);
Значение = Лист.Cells(<НомерСтроки>,<НомерКолонки>).Value;

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


Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Мы рассмотрели открытие существующей книги при получении данных из Excel, поэтому рассмотрим алгоритм создания новой книги:
1.Создаем новую книгу
Код:
Попытка
    Эксель = СоздатьОбъект("Excel.Application");  
Исключение
    Сообщить(ОписаниеОшибки() + " Нет доступа к программе Excel");  
    Возврат;
КонецПопытки;  
Книга = Эксель.WorkBooks.Add();

При создании новой книги автоматически создаются и листы.
2.Сделаем выбор листа в который будем производить вывод данных:
Код:
Лист = Книга.WorkSheets(НомерЛиста);

Можно добавить новый лист в существующую книгу:
Код:
Лист = Книга.Sheets.Add();

3.Теперь очень ответственный шаг - установка значения ячейки. От него будет зависить в какую область будет выведены данные из 1c:
Код:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;

4.Завершающим этапом будет сохранение данных:
Код:
Попытка
    Книга.SaveAs(<ПолныйПутьКФайлу>);  
Исключение
    Сообщить(ОписаниеОшибки()+" Файл не сохранен!");  
    Возврат;
КонецПопытки;


Полезные методы для взамодействия 1С с Excel через OLE
Код:

 
//Передача данных в(из) 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 - тонкая сплошная.
 
//Работа с защищенными листами Excel  
 
ActiveSheet.Unprotect(<password>) //программное снятие защиты листа в Excel из 1С (password- пароль на лист)
 
 
 
Top
FelixDaCat
Отправлено: 02 Августа, 2009 - 18:31:53
Ответить с цитированием Цитирование


новичек


Top offline

Сообщений: 10  
Регистрация: Июль 2009  
Карма: 0
Поощрить/Наказать




ушел в заплыв)
_________________
Кто знает где выгоднее совершить продажу пенобетонных блоков в нашем регионе
 
Top
Страниц (1)
« Доработка типовых решения основе 1С:Предприятие 8 »

ОтветитьНовая тема



Форум 1С Предприятие Вы можете ознакомиться с услугами внедрения,сопрвождения,автоматизации 1С:Предприятие на нашем сайте
Rambler's Top100

[ Script Execution time: 1.3438 ]   [ Gzipped ]