Пример работы с MS EXCEL (листы, поиск на листе) Код 1C v 8.х ДокументExcel = ПолучитьCOMОбъект(ИмяФайла); //Листы : СписокЛистов = Новый СписокЗначений; Для каждого Лист Из ДокументExcel.Sheets Цикл СписокЛистов.Добавить(Лист.Index,Лист.Name); КонецЦикла; ЛистExcel= ДокументExcel.Sheets(НомерЛистаКниги); ПоследняяСтрока = ЛистExcel.UsedRange.Rows.Count; ЛеваяКолонка = ЛистExcel.UsedRange.Column; ПоследняяКолонка = ЛистExcel.UsedRange.Columns.Count; НомерКолонкиСТекстом=ЛистExcel.UsedRange.Find("text").Column; //Или НомерКолонкиСТекстом=ЛистExcel.Cells.Find("text").Column; //Подчищаем за собой память ДокументExcel.Application.Quit();
Категория:
Работа с Microsoft Office и OpenOffice Как выгрузить Таблицу значение в файл Excel? Код 1C v 8.х Процедура СохранитьТаблицуВФайлExcel(Таблица, ПолноеИмяФайла="", ОткрыватьДиалогВыбораФайла=Истина, ВыгружаемыеКолонки="") Экспорт
Если ПустаяСтрока(ПолноеИмяФайла) ИЛИ ОткрыватьДиалогВыбораФайла Тогда
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Сохранение документа Excel";
Диалог.Фильтр = "Документ Excel (*.xls)|*.xls";
Диалог.Расширение = "xls";
Диалог.ПолноеИмяФайла = ПолноеИмяФайла;
Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойКаталогФайлов");
Если (Диалог.Выбрать()) И (НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла)) Тогда
ПолноеИмяФайла = Диалог.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
ФайлНаДиске = Новый Файл(ПолноеИмяФайла);
Попытка
// Загрузка Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Книга = ExcelПриложение.WorkBooks.Add();
Лист = Книга.WorkSheets(1);
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Если ПустаяСтрока(ВыгружаемыеКолонки) Тогда
ТаблицаВыгрузки = Таблица.Скопировать();
Иначе
ТаблицаВыгрузки = Таблица.Скопировать(, ВыгружаемыеКолонки);
КонецЕсли;
Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл
Лист.Cells(1, Кол + 1).Value = ТаблицаВыгрузки.Колонки[Кол].Заголовок;
КонецЦикла;
Попытка
Для Стр = 0 По ТаблицаВыгрузки.Количество()-1 Цикл
Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл
Если ТипЗнч(ТаблицаВыгрузки[Стр][Кол]) = Тип("Число") Тогда
// Установним формат для типа Число
//Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "0,00";
Лист.Cells(Стр + 2, Кол + 1).Value = ТаблицаВыгрузки[Стр][Кол];
Иначе
// Для всех других типов установим формат "Текстовый"
//Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "@";
Лист.Cells(Стр + 2, Кол + 1).Value = Строка(ТаблицаВыгрузки[Стр][Кол]);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ExcelПриложение.DisplayAlerts = False;
Книга.SaveAs(ПолноеИмяФайла);
ExcelПриложение.ActiveWorkbook.Close();
ExcelПриложение.Quit();
Сообщить("Файл выгружен успешно: " + ПолноеИмяФайла);
Исключение
Сообщить("Ошибка записи данных файла :" + ПолноеИмяФайла);
Сообщить(ОписаниеОшибки());
Попытка
ExcelПриложение.Quit();
Исключение
КонецПопытки;
КонецПопытки;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Активация открытой книги Excel для корректировки Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять.
Ниже код, который данную задачу решает.
Код 1C v 8.х
Попытка
Эксель = Неопределено;
Книга = Неопределено;
Лист = Неопределено;
Состояние("Выполняется подключение к Excel");
Попытка
Книга = ПолучитьCOMОбъект(Файл, "Excel.Application");
Эксель = Книга.Application;
Исключение
Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(Файл);
КонецПопытки;
Лист = Книга.WorkSheets(1);
Эксель.Visible = Истина;
Исключение
Сообщить("Не удалось подключить Excel." + Символы.ПС + ОписаниеОшибки());
Возврат;
КонецПопытки;
Категория:
Работа с Microsoft Office и OpenOffice Импорт документа Excel через web-клиент Во время реализации задачи по регистрации продаж дистрибьюторов на основании Excel документов столкнулся с интересной задачей. Необходимо реализовать загрузку файла и на стороне сервера обработать его, заполнив табличную часть документа.
Решение состоит из двух функций: клиентской и серверной.
Клиентская часть инициирует выбор файла, передачу выбранного файла на сервер и передача управления серверной процедуре.
Код 1C v 8.2 УП #НаКлиенте
Процедура ИмпортИзВнешнегоФайла(Команда)
//Выбор и загрузка файла.
Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
УстановитьРасширениеРаботыСФайлами();
КонецЕсли;
Если ПодключитьРасширениеРаботыСФайлами() Тогда
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Фильтр = "Текст(*.xls)|*.xls";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для импорта";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.МедицинскиеРаботники.Очистить();
ДанныеНачинаютсяС = 1;
Если Не ВвестиЧисло(ДанныеНачинаютсяС, "Данные начинаются со строки", 2, 0) Тогда
Возврат;
КонецЕсли;
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
ПомещаемыеФайлы = Новый Массив;
Для Каждого Файл Из МассивФайлов Цикл
ТекФайл = Новый Файл(Файл);
Описание = Новый ОписаниеПередаваемогоФайла(Файл, "");
ПомещаемыеФайлы.Добавить(Описание);
КонецЦикла;
ПомещенныеФайлы = Новый Массив;
Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда
//Запуск импорта
ИмпортироватьФайлИзВременногоХранилищаВТЗ(ПомещенныеФайлы, ДанныеНачинаютсяС);
КонецЕсли;
Иначе
Предупреждение("Файл(ы) не выбран!");
КонецЕсли;
Иначе
Предупреждение(НСтр("ru ='Данная возможность недоступна, так как не подключено расширение работы с файлами.'", "ru"));
КонецЕсли;
КонецПроцедуры //ИмпортИзВнешнегоФайла()
Серверная процедура перебирает полученные на сервер файлы. Получает COM-объекты и импортирует данные.
Код 1C v 8.2 УП #НаСервере
Процедура ИмпортироватьФайлИзВременногоХранилищаВТЗ(МассивФайлов, ДанныеНачинаютсяС)
ДокументОбъект = РеквизитФормыВЗначение("Объект");
//Обход файлов, записанных во временное хранилище
Для Каждого ЭлементМассива Из МассивФайлов Цикл
ФайлИзХранилища = ПолучитьИзВременногоХранилища(ЭлементМассива.Хранение);
ВременныйФайл = ПолучитьИмяВременногоФайла("xls");
//Сохранение во временнный файл на диске
ФайлИзХранилища.Записать(ВременныйФайл);
//Импорт
Док = ПолучитьCOMОбъект(ВременныйФайл);
ФИОУчастника = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 2).Value;
Пока СокрЛП(ФИОУчастника) ="" Цикл
// Добавление строки с файла в документ
НоваяСтрока = ДокументОбъект.МедицинскиеРаботники.Добавить();
НоваяСтрока.Фио = ФИОУчастника;
НоваяСтрока.Учреждение = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 7).Value;
НоваяСтрока.Адрес = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value;
НоваяСтрока.Телефон = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 4).Value;
НоваяСтрока.ЭлПочта = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value;
НоваяСтрока.Образование = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 6).Value;
ДанныеНачинаютсяС = ДанныеНачинаютсяС + 1;
ФИОУчастника = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 2).Value;
КонецЦикла;
Сообщить("Импорт завершён");
Док.Application.Quit();
КонецЦикла;
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры //ИмпортироватьФайлИзВременногоХранилищаВТЗ()
Источник Категория:
Работа с Microsoft Office и OpenOffice Отправка отчетов из 1С по электронной почте (E-Mail) Автоматическая генерация отчета "Анализ заказов поставщикам"
Отчет анализ заказов является штатным отчетом конфигурации 1С Управление производственным предприятием. Обработка для генерации отчета, рассматриваемая в данной статье, позволяет программно создать и настроить форму отчета, запустить его выполнение. Полученный результат сохраняется в файл Microsoft Excel (XLS, XLSX) и может быть отправлен по электронной почте.
Предлагаемое решение состоит из трех файлов: Скачивать файлы может только зарегистрированный пользователь!
service.vbs служит для запуска 1С предприятия и генерации отчета;
emailer.vbs - VBS скрипт предназначен для отправки результатов выполнения запроса отчета на указанный при настройке адрес электронной почты;
rep_email.epf - сама внешняя обработка для генерации отчета, выполняющая настройки отображаемых показателей, группировок строк и столбцов, установки требуемых отборов отчета, обеспечивает выполнение запроса и формирования табличного документа по макету отчета и сохранение сформированного отчета в XLS файл.
Запуск отчета выполняется посредством VBS файла (vbscript) при помощи "Назначенных заданий". VBS программа обеспечивает запуск приложения 1С, устанавливает соединение с сервером 1С и передает управление внешней обработке через экспортную функцию ReportNow(), размещенную в общем модуле обработки по генерации отчета. Пример VBS Script для выполнения внешней обработки 1С из командной строки:
Код VBS ' Установить соединение с сервером 1С
Set v81 = CreateObject("V81.Application")
res = v81.Connect("Srvr=Server1C;Ref = db1C;Usr=User1C;Pwd=Password1C")
' Передать управление внешней обработке по генерации Отчета Анализ Заказов
res = v81.ExternalDataProcessors.Create("C:\1C\Service\rep_email.epf").ThisObject.Report()
v81.Exit(false)
' Дать возможность 1С закрыть все открытые файлы и выгрузиться из памяти
WScript.Sleep(5000)
' Вызвать VBS скрипт отправки почты по E-Mail
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\1C\ Service\emailer.vbs"
VBS E-Mail скрипт для отправки готового отчета в формате Excel создает новое электронное письмо на заданный адрес, в теле письма указывает пояснение к отчету, а в качестве вложения прикрепляет файл, создание и наполнение информацией которого была произведена при запуске service.vbs
Код VBS 'Отправить сообщение с помощью локальной службы SMTP
Const cdoSendUsingPickup = 1
'Отправить сообщение с помощью сети (SMTP через сеть)
Const cdoSendUsingPort = 2
Const cdoAnonymous = 0
Const cdoBasic = 1
Const cdoNTLM = 2
Set objMessage = CreateObject("CDO.Message")
' Тема сообщения и адрес отправителя
objMessage.Subject = "Ежедневный отчет Анализ заказов поставщикам"
objMessage.From = """Генератор отчетов"" "
' Получатели письма указываются через " ; "
objMessage.To = "email@domain.org; recv@domain.net; last@domain.ru"
' Содержимое тела письма.
objMessage.TextBody = "JSC AUTO SERVICE. Please find Orders reporting in attachment." & vbCRLF & _
"------------------------------------------" & vbCRLF & _
"Best regards, Auto report service" & vbCRLF & _
"Support line: it@domian.ru" & vbCRLF
' Добавляем файл - вложение для отправки отчета по EMail
objMessage.AddAttachment "C:\1C\Service\ЗаказыПоставщику.xls"
' Секция настроек SMTP сервера для отправки почты.
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
' Имя или IP адрес SMTP Server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.ru"
' Тип используемой авторизации, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
' Авторизация на SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "report@domain.ru"
' Пароль SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "youpassword"
' Порт SMTP Server port (обычно 25, но может быть и другим)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
' Использование SSL для соединения (False или True)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
' Время ожидания соединения с почтовым сервером
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
' Сохранить настройки CDO для отправки сообщения
objMessage.Configuration.Fields.Update
' Отправить созданное почтовое сообщение с вложением отчета в формате XLS по указанному адресу
objMessage.Send
Внешняя обработка по запуску отчета "Анализ заказов поставщику" состоит из двух процедур. Первая - "ReportNow() Экспорт" служит для определения входной точки передачи управления от VBS к 1С. Вторая - "ОткрытьОтчетПоИмени()" - выполняет действия по настройке критериев отбора отчета, группировке строк и столбцов, определению состава количественных показателей. Данный способ вызова отчетов стандартной конфигурации широко применяется в различных формах 1С, и по мере развития конфигурации может быть позаимствован как минимум из нескольких форм списка справочников (Контрагенты, Номенклатура и т.д.). Исходный код первой функции: >
Код 1C v 8.х Процедура ReportNow() Экспорт
// Вызывается из vbscript, выполняет работы с отчетом.
ОткрытьОтчетПоИмени("АнализЗаказовПоставщикам");
КонецПроцедуры
Сохранение отчета из 1С в Excel
Процедура формирования формы отчета принимает в качестве параметра название объекта метаданных конфигурации, в данном случае - "АнализЗаказовПоставщикам". Очевидно, что в зависимости от типа отчета процедура будет меняться пропорционально используемым реквизитам. В рассматриваемом примере добавляется отбор по контрагенту. Для своего ключевого поставщика заменить значение искомого наименования на нужное.
Код 1C v 8.х Процедура ОткрытьОтчетПоИмени(НазваниеОтчета) Экспорт
// получаем отчет и открываем форму
// для построения отчета по названию отчета
Отчет = Отчеты[НазваниеОтчета].Создать();
Форма = Отчет.ПолучитьФорму(, , );
Форма.Открыть();
// Выполнить настройку отчета по умолчанию
Отчет.УстановитьНачальныеНастройки();
// Добавить требуемый отбор по поставщику
ТекОтбор = Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.ДоговорКонтрагентаВладелец;
ТекОтбор.Использование = Истина;
ТекОтбор.Значение = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");
ТекОтбор.ВидСравнения = ВидСравнения.Равно;
// Добавляем специфичное для нас измерение в отборе - например, "осталось отгрузить"
// в данном случае из отчета уйдут позиции, по которым все получено.
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Добавить("ОсталосьОтгрузитьЕдиницОтчетов");
ТекОтбор1 = ОтчетОстатки.УниверсальныйОтчет.ПостроительОтчета.Отбор.ОсталосьОтгрузитьЕдиницОтчетов;
ТекОтбор1.Использование = Истина;
ТекОтбор1.Значение = 0;
ТекОтбор1.ВидСравнения = ВидСравнения.Больше;
// Состав отдельных ключевых показателей
// для каждого отчета можно посмотреть в конфигураторе
Отчет.СостояниеОтгрузкиПоЗаказу = истина;
Отчет.НеОтгружено = Истина;
Отчет.ОтгруженоЧастично = Истина;
// После завершения настроек нажмем программно кнопку "Сформировать"
Отчет.СформироватьОтчет(ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокументаРезультат);
// Сформировать путь и имя файла для сохранения отчета
мПутьШаблон="C:\1C\Service";
мФайлШаблон="ЗаказыПоставщику.xls";
ИмяФайла = мПутьШаблон + "\" + мФайлШаблон;
// Полученные в отчете цифры и данные сохраним в файл Excel
Если Не ИмяФайла = Неопределено Тогда
Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат.СохранятьСвойстваОтображения = Истина;
Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);
КонецЕсли;
// Закрыть форму отчета после завершения работы
ФормаОтчета.Закрыть();
КонецПроцедуры
Для того, чтобы отладить обработку в режиме 1С:Предприятие, запущенного из конфигуратора можно создать экранную форму обработки и разместить в ней следующую процедур автоматического запуска отлаживаемого отчета:
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = истина;
ОткрытьОтчетПоИмени("АнализЗаказовПоставщикам");
КонецПроцедуры
Надеемся, что успешная комбинация внешней обработки для запуска отчета по расписанию и vbscript поможет в автоматизации бизнеса вашего предприятия. Данная редакция настроек больше ориентирована на менеджера поставщика для вашей компании, что отслеживать взаимное движение товаров и документов.
Источник
Руководство компании, хочет получать оперативную сводку продаж по фирме Категория:
Работа с Интернет, Почтой (Mail), FTP Быстрая загрузка данных большого размера файла Excel в многомерный Массив Код 1C v 8.х // OldthiefXXX
Перем СерверExcel;
Процедура КнопкаВыполнитьНажатие(Кнопка)
ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС);
КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count;
КоличествоКолонокДанных=ФайлХЛС.ActiveSheet.UsedRange.Columns.Count;
Состояние("Загрузка в память данных ведомости...");
ExcelЛист=ФайлХЛС.ActiveSheet;
Область = СерверExcel.Range(ExcelЛист.Cells(1,1), ExcelЛист.Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных));
МассивДанныхEXEL = Область.Value.Выгрузить();
КонецПроцедуры
Процедура ИнициализацииЕкселя()
Состояние("Происходит инициализация EXCEL...");
Попытка
СерверExcel1 = Новый COMОбъект("Excel.Application");
СерверExcel1.DisplayAlerts = 0;
Исключение
ЗапущенExcel = 0;
Сообщить(ОписаниеОшибки(),"!");
КонецПопытки;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Преобразование XLS в MXL Конвертация таблиц из Excel в MXL - скачать Converter Excel v MXL:
Для 8.х -
Скачивать файлы может только зарегистрированный пользователь!
Для 7.7 -
Скачивать файлы может только зарегистрированный пользователь!
Код 1C v 8.х // Выбор файла Microsoft Excel
Procedure FileNameStartChoice(Element, StdProcessing)
StdProcessing = False;
DialogFile = New FileDialog(FileDialogMode.Open);
DialogFile.Filter = "Файлы Microsoft Excel (*.xls)|*.xls";
DialogFile.DefaultExt = "xls";
If DialogFile.Choose() Then
FileName = DialogFile.FullFileName;
EndIf;
EndProcedure // FileNameStartChoice()
// Получить список листов текущей книги
Function GetSheets(ExcelApplication)
ListS_electSheet = New ValueList;
ListS_electSheet.Add(0, "Все листы");
NumberSheet = 0;
For FirstSheet = 1 To ExcelApplication.Worksheets.Count Do
NumberSheet = NumberSheet + 1;
ListS_electSheet.Add(
NumberSheet, ExcelApplication.WorkSheets(NumberSheet).Name
);
EndDo;
Return ListS_electSheet;
EndFunction // GetSheets()
// Преобразование XLS в MXL
Procedure ButtonExecuteClick()
If IsBlankString(FileName) Then
DoMessageBox("Не указано имя файла");
Return;
EndIf;
Try
ExcelApplication = GetCOMObject(FileName); // Excel.Application
Except
DoMessageBox("Ошибка чтения файла: " + FileName + " возможно защищен паролем.");
Return;
EndTry;
S_electSheet = 0;
S_electSheet = GetSheets(ExcelApplication).ChooseItem("Выберите лист", S_electSheet);
If S_electSheet = Undefined Then
Return;
EndIf;
S_electNumberSheet1 = S_electSheet.Value;
S_electNumberSheet2 = S_electNumberSheet1;
If S_electNumberSheet1 = 0 Then
S_electNumberSheet1 = 1;
S_electNumberSheet2 = ExcelApplication.Worksheets.Count
EndIf;
frmProgressBar = GetForm("FormProgressBar");
frmProgressBar.Caption = "Обрабатывается файл: " + FileName;
frmProgressBar.Controls.ProgressBarAll.MaxValue = S_electNumberSheet2;
frmProgressBar.Controls.ProgressBarAll.Value = 0;
For NumberSheet = S_electNumberSheet1 To S_electNumberSheet2 Do
frmProgressBar.Open();
SprDoc = New SpreadsheetDocument;
Try
WorkSheet = ExcelApplication.Sheets(NumberSheet).UsedRange;
Except
DoMessageBox(ErrorDescription());
Return;
EndTry;
AllStrings = WorkSheet.Rows.Count; // Всего строк
AllColumns = WorkSheet.Columns.Count; // Всего колонок
AllCells = AllStrings * AllColumns; // Все ячейки
frmProgressBar.Controls.InfoProgressBarAll.Value = "Обрабатывается лист № " +
NumberSheet + " из " +
S_electNumberSheet2;
frmProgressBar.Controls.ProgressBarAll.Value = frmProgressBar.Controls.ProgressBarAll.Value + 1;
If AllCells < 2 Then
Continue; // Пустой лист
EndIf;
frmProgressBar.Controls.ProgressBarCur.MaxValue = AllStrings;
frmProgressBar.Controls.ProgressBarCur.Value = 0;
For CurrentString = 1 To AllStrings Do
For CurrentColumn = 1 To AllColumns Do
frmProgressBar.Controls.InfoProgressBarCur.Value = "Обрабатывается строка №: " +
TrimAll(CurrentString) +
" из " + AllStrings +
", колонка №: " +
TrimAll(CurrentColumn) +
" из " + AllColumns;
Try
CurrentCell = WorkSheet.Cells(
CurrentString,
CurrentColumn
);
SlcCell = SprDoc.Area(
CurrentString,
CurrentColumn,
CurrentString,
CurrentColumn
);
SlcCell.RowHeight = CurrentCell.RowHeight;
SlcCell.ColumnWidth = CurrentCell.ColumnWidth;
// Горизонтальное положение
SlcCell.HorizontalAlign = mListHorizontalAlign.Get(
Format(CurrentCell.HorizontalAlignment, "NG=0")
);
// Вертикальное положение
SlcCell.VerticalAlign = mListVerticalAlign.Get(
Format(CurrentCell.VerticalAlignment, "NG=0")
);
// Размещение текста
SlcCell.TextPlacement = ?(
CurrentCell.WrapText = 0,
SpreadsheetDocumentTextPlacementType.Auto,
SpreadsheetDocumentTextPlacementType.Wrap
);
FontCell = CurrentCell.Font;
// Цвет фона
SlcCell.BackColor = mColorRGB(
CurrentCell.Interior.Color
);
// Цвет текста
SlcCell.TextColor = mColorRGB(
FontCell.Color
);
SlcCell.Font = New Font(
FontCell.Name,
Number(FontCell.Size),
?(Number(FontCell.Bold) = 0,
False, True),
?(Number(FontCell.Italic) = 0,
False, True),
?(Format(Number(FontCell.Underline),"NG=0") = "-4142",
False, True),
?(FontCell.Strikethrough, // Зачеркнутый шрифт
True, False)
);
SlcCell.Text = CurrentCell.Value;
// Рамка
Try
SlcCell.LeftBorder = mStyleBorder(CurrentCell, 7);
SlcCell.TopBorder = mStyleBorder(CurrentCell, 8);
SlcCell.RightBorder = mStyleBorder(CurrentCell, 10);
SlcCell.BottomBorder = mStyleBorder(CurrentCell, 9);
Except
EndTry;
SlcCell.Details = CurrentCell.Formula;
// Объединение ячеек
If (CurrentCell.MergeCells <> 0) and
(Find(CurrentCell.MergeArea.Rows.Address(,, 2),
CurrentCell.Address(,, 2)) = 1) Then
SlcCell = SprDoc.Area(
CurrentString,
CurrentColumn,
(CurrentString + CurrentCell.MergeArea.Rows.Count - 1),
(CurrentColumn + CurrentCell.MergeArea.Columns.Count - 1)
);
SlcCell.Merge();
EndIf;
Except
Message(ErrorDescription());
EndTry;
EndDo;
frmProgressBar.Controls.ProgressBarCur.Value = frmProgressBar.Controls.ProgressBarCur.Value + 1;
UserInterruptProcessing(); // Прерывание пользователя Ctrl+Break
EndDo;
SprDoc.Show("" + TrimAll(FileName) + ", лист " + NumberSheet,"");
EndDo;
frmProgressBar.Close();
ExcelApplication = "";
EndProcedure // ButtonExecuteClick()
Категория:
Работа с Microsoft Office и OpenOffice Экспорт и Импорт данных 1С - Microsoft Excel Экспорт
Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка;
Код 1C v 8.х Процедура ОсновныеДействияФормыЭкспорт(Кнопка)
Попытка
Попытка
// Загрузка объекта Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
// Создадим книгу, по умолчанию в ней уже есть листы
Книга = ExcelПриложение.WorkBooks.Add();
// Используем первый лист книги Excel
Лист = Книга.WorkSheets(1);
// Сформировать шапку документа в первой строке листа
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
// Выгрузить данные справочника
выборка = Справочники[ИмяСправочника].Выбрать();
СтрокаЛиста = 2;
Пока выборка.Следующий() Цикл
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Попытка
// Установить значение в строке и колонке
Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
// Установить формат для типа Число
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
иначе
// Для всех других типов установим формат "Текстовый"
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Строка(выборка[стр.НазваниеРеквизита]);
КонецЕсли;
исключение
// в случае ошибки вывести номер строки и колонки
Сообщить("Ошибка установки значения для: " +
выборка[стр.НазваниеРеквизита]);
Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
Колонка+ " Рек: " + стр.НазваниеРеквизита);
КонецПопытки;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
СтрокаЛиста = СтрокаЛиста + 1;
Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
КонецЦикла;
// Сохраним созданную книгу в файл xls
Книга.SaveAs(имяФайла);
// Обязательно закроем соединение с COM объектом для освобождения памяти
ExcelПриложение.Quit();
Сообщить("Файл выгружен успешно: " + имяФайла );
Исключение
// Обработка ошибок экспорта данных из 1С в Excel
Сообщить("Ошибка записи данных файла :" + имяФайла);
Сообщить(ОписаниеОшибки());
Попытка
ExcelПриложение.Quit();
Исключение
КонецПопытки;
КонецПопытки;
КонецПроцедуры
Импорт
Исходный код процедуры 1С для загрузки XLS файла:
Код 1C v 8.х Процедура ЧтениеXLSФайла(Элемент)
Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
Возврат;
КонецЕсли;
Попытка
// Загрузка Microsoft Excel
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Попытка
// Открытие файла Microsoft Excel
Состояние("Открытие файла Microsoft Excel...");
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
Попытка
// Обработка файла Microsoft Excel
Состояние("Обработка файла Microsoft Excel...");
// Читаем данные первого листа книги
ExcelЛист = ExcelФайл.Sheets(1);
// Определить количество строк и колонок выбранного листа книги Excel
xlCellTypeLastCell = 11;
ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
КонецПопытки;
// Создание описателя типов для таблицы значений
КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(50);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
// Очистить предыдущие значения
ТаблицаДокумента.Очистить();
ТаблицаДокумента.Колонки.Очистить();
// Создать колонки табличного документа
ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",5);
ТаблицаДокумента.Колонки.Добавить("Артикул",ОписаниеТиповС,"Артикул",11);
ТаблицаДокумента.Колонки.Добавить("Описание",ОписаниеТиповС,"Описание",25);
ТаблицаДокумента.Колонки.Добавить("Цена",ОписаниеТиповЧ,"Цена",6);
// Последовательное чтение строк с выбранного листа
Для Строка = 1 По ExcelПоследняяСтрока Цикл
// Обработка нажатия Ctrl + Break
ОбработкаПрерыванияПользователя();
// Добавить данные в табличную часть экранной формы
Стр=ТаблицаДокумента.Добавить();
Стр.Номер = Строка;
Попытка
Стр.Артикул = ExcelЛист.Cells(Строка, 1).Value;
Стр.Описание = ExcelЛист.Cells(Строка, 2).Value;
Стр.Цена = ExcelЛист.Cells(Строка, 3).Value;
Исключение
// Не редко происходит ошибка конвертации отдельной ячейки документа
Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние("Обработка файла Microsoft Excel : "
+ "строка " + Строка + " из " + ExcelПоследняяСтрока);
КонецЦикла;
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
// Отобразить результаты загрузки в форме элемента
ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
КонецПроцедуры // ЧтениеXLSФайла(Элемент)
Категория:
Работа с Microsoft Office и OpenOffice Быстрая выгрузка отчетов в Excel, наложение Фильта и отображение ярлыка Вместо Таб.Показать() используем глобальную функцию - и отчет показывается сразу в Excel в удобоваримом виде - с форматированием колонок по ширине, автофильтром и ярлычками листов
Код 1C v 7.x Процедура глОткрытьВЭкселе(Таб,ИмяФайла="",НеИзменятьВысотуСтроки=0) Экспорт
Попытка
// запускаем Excel-Server
Excel = СоздатьОбъект("Excel.Application");
Исключение
Excel = 0;
Предупреждение("MS Excel не загружен!");
Возврат;
КонецПопытки;
Если ТипЗначенияСтр(Таб)="Строка" Тогда
Excel.WorkBooks.Open(Таб);
Иначе
Если НеИзменятьВысотуСтроки=0 Тогда
ШиринаТаблицы=Таб.ШиринаТаблицы();
Область=Таб.Область(1,1,Таб.ВысотаТаблицы(),ШиринаТаблицы);
Область.ВысотаСтроки(12);
КонецЕсли;
Если Найти(ИмяФайла,":")=0 Тогда
ИмяФайла=КаталогПользователя()+ИмяФайла;
КонецЕсли;
Если Найти(Врег(ИмяФайла),"XLS")=0 Тогда
ИмяФайла=ИмяФайла+".xls";
КонецЕсли;
Таб.Записать(?(ПустоеЗначение(ИмяФайла)=0,ИмяФайла,КаталогПользователя()+"Таблица.xls"),"XLS");
Excel.WorkBooks.Open(ИмяФайла);
Excel.Visible = 0;
//добавляем автофильтр и форматирование колонок по ширине
Excel.Columns.AutoFit();
Range = Excel.Range(Excel.Cells(1, 1), Excel.Cells(1, ШиринаТаблицы));
Range.S_elect();
Range.AutoFilter();
//показываем вечно прячущиеся ярлычки листов
Excel.ActiveWindow.DisplayWorkbookTabs = -1;
Excel.ActiveWindow.TabRatio = 0.25;
КонецЕсли;
Excel.Visible=1;
Excel=0;
КонецПроцедуры
mikukrnet Категория:
Работа с Microsoft Office и OpenOffice Быстрая функция чтения данных с листа Excel При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки раз.
Вот текст функции:
Код 1C v 8.х Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
Если ЛистЭксель = Неопределено Тогда
ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
КонецЦикла;
Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();
Для Счетчик = 0 По ВсегоКолонок-1 Цикл
ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
КонецФункции
Комментировать функцию, думаю, нет необходимости. Вот собственно и все, что я хотел сказать.
wildhog Категория:
Работа с Microsoft Office и OpenOffice Как таблицу значений выгрузить в Excel Код 1C v 8.х
Процедура ВыгрузкаВЭксель(Т) Экспорт
Попытка
XL = Новый COMОбъект ("Excel.Application");
Исключение
Сообщить("Ошибка создания Excel.Application");
Возврат;
КонецПопытки;
XL.Visible = 1;
wb = XL.Workbooks.Add();
sh = wb.Worksheets.Add();
Кол = Т.Колонки.Количество();
Если Кол = 0 Тогда
Возврат;
КонецЕсли;
Для К = 1 По Кол Цикл
Заг = Т.Колонки[К-1].Имя;
sh.Cells(1,К).Font.Name = "Tahoma";
sh.Cells(1,К).Font.Size = 10;
sh.Cells(1,К).Font.FontStyle = "Bold";
sh.Cells(1,К).FormulaR1C1 = Заг;
КонецЦикла;
Для Каждого Стр Из Т Цикл
Для К = 1 По Кол Цикл
Зн = Стр[К-1];
sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);
КонецЦикла;
КонецЦикла;
sh.Columns.AutoFit();
КонецПроцедуры
Категория:
Работа с Таблицей Значений Как запустить макрос, записанный в книге Microsoft Office Excel? Код 1C v 8.х Попытка
// Создать объект.
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось инициализировать Excel");
Возврат;
КонецПопытки;
Попытка
// В реальном примере путь может быть совершенно другим.
Excel.Workbooks.Open("c:\doc.xls");
// Запустить макрос с именем "Оформление".
Excel.Run("Оформление");
Excel.Visible = Истина;
Исключение
// Если произойдет ошибка, выводятся данные об ошибке и объект закрывается.
Сообщить(ОписаниеОшибки());
Excel.Quit();
КонецПопытки;
Категория:
Работа с Microsoft Office и OpenOffice Чтение и Вывод данных в Excel Замечание: В Excel разделителем дробной части считается символ ",". Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например ".") на ",". Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С "15.2" отобразится в Excel как "15.фев".
Для 8.х заменить СоздатьОбъект( на Новый COMОбъект(
Чтение (Получение) данных из Excel
Доступ из 1С к Excel производится посредством OLE. Например, код
Код 1C v 7.x Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
позволит получить доступ через переменную "Эксель" к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными.Чтобы открыть книгу (файл)
Код 1C v 7.x Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
//ПутьКФайлу - полный путь к файлу книги Excel.
//Выбор листа книги для работы с ним:
Лист = Книга.WorkSheets(НомерЛиста);
//или
Лист = Книга.WorkSheets(ИмяЛиста);
// где НомерЛиста - номер листа в книге, ИмяЛиста - имя листа в книге.
// Получение значения ячейки листа:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
// где НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения нужных действий добавлять код
Код 1C v 7.x Эксель.Quit();
, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
Вывод данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Код 1C v 7.x Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Add();
Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:
Код 1C v 7.x Лист = Книга.WorkSheets(НомерЛиста);
// либо добавить в книгу новый лист, если необходимо:
Лист = Книга.Sheets.Add();
Следующим шагом будет установка значения ячейки:
Код 1C v 7.x Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
// где НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Код 1C v 7.x Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
Возврат;
КонецПопытки;
// где ПутьКФайлу - полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов \ / : * ? " > < Категория:
Работа с Microsoft Office и OpenOffice Выгрузка данных в Excel с установкой разных параметров Код 1C v 8.х // Процедура выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel
// с указанным именем, используя преобразование данных к типу число и типу строка;
Процедура ОсновныеДействияФормыЭкспорт(Кнопка)
Попытка
Попытка
// Загрузка объекта Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
// Создадим книгу, по умолчанию в ней уже есть листы
Книга = ExcelПриложение.WorkBooks.Add();
// Используем первый лист книги Excel
Лист = Книга.WorkSheets(1);
// Сформировать шапку документа в первой строке листа
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
// Выгрузить данные справочника
выборка = Справочники[ИмяСправочника].Выбрать();
СтрокаЛиста = 2;
Пока выборка.Следующий() Цикл
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Попытка
// Установить значение в строке и колонке
Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
// Установить формат для типа Число
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
иначе
// Для всех других типов установим формат "Текстовый"
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Строка(выборка[стр.НазваниеРеквизита]);
КонецЕсли;
исключение
// в случае ошибки вывести номер строки и колонки
Сообщить("Ошибка установки значения для: " +
выборка[стр.НазваниеРеквизита]);
Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
Колонка+ " Рек: " + стр.НазваниеРеквизита);
КонецПопытки;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
СтрокаЛиста = СтрокаЛиста + 1;
Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
КонецЦикла;
// Сохраним созданную книгу в файл xls
Книга.SaveAs(имяФайла);
// Обязательно закроем соединение с COM объектом для освобождения памяти
ExcelПриложение.Quit();
Сообщить("Файл выгружен успешно: " + имяФайла );
Исключение
// Обработка ошибок экспорта данных из 1С в Excel
Сообщить("Ошибка записи данных файла :" + имяФайла);
Сообщить(ОписаниеОшибки());
Попытка
ExcelПриложение.Quit();
Исключение
КонецПопытки;
КонецПопытки;
КонецПроцедуры
Код 1C v 7.x //Простейший пример вывода из 1С:Предприятия 7.7 в MS Excel. Обеспечение наличия у рабочей книги единственного листа,
//установка размера, жирности и цвета шрифта, ширины колонок, рамок и заливки ячеек. Выравнивание текста
//ячеек, группировка строк, установка числового формата ячеек, закрепление области.
Процедура Вывод()
Попытка
Application=СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
Возврат;
КонецПопытки;
//Создание рабочей книги
WorkBook=Application.WorkBooks.Add();
//Получение окна
Window=WorkBook.Windows(1);
//Установка невидимости окна для убыстрения вывода
Window.Visible=0;
//Обеспечение наличия у рабочей книги единственного листа
Если WorkBook.Worksheets.Count=0 Тогда
WorkBook.Worksheets.Add();
Иначе
Application.DisplayAlerts=0;//не выдавать предупреждений
Пока WorkBook.Worksheets.Count>1 Цикл
WorkBook.Worksheets(1).Delete();
КонецЦикла;
Application.DisplayAlerts=-1;//восстановление флага выдачи предупреждений
КонецЕсли;
//Получение рабочего листа
Worksheet=WorkBook.Worksheets(1);
//Задание имени рабочего листа
Worksheet.Name="Пример вывода";
//Заголовок документа
Worksheet.Range("A1").Value="Пример вывода из 1С:Предприятия в MS Excel";
Worksheet.Range("A2").Value="сегодня "+ТекущаяДата();
Worksheet.Range("A1:A2").Font.Size=14;//размер шрифта
Worksheet.Range("A1:A2").Font.Bold=-1;//жирный шрифт
//Задание ширины колонок
Worksheet.Columns(1).ColumnWidth=60;
Worksheet.Columns(2).ColumnWidth=15;
Worksheet.Columns(3).ColumnWidth=15;
//Шапка документа
Worksheet.Range("A4").Value="Первая колонка";
Для ы=7 по 10 Цикл//рамки
Worksheet.Range("A4").Borders(ы).LineStyle=1;
Worksheet.Range("A4").Borders(ы).Weight=-4138;//xlMedium
КонецЦикла;
Worksheet.Range("A4").Interior.ColorIndex=15;//заливка серым
Worksheet.Range("A4").HorizontalAlignment=-4108;//выравнивание текста по центру
Worksheet.Range("B4").Value="Вторая";
Для ы=7 по 10 Цикл
Worksheet.Range("B4").Borders(ы).LineStyle=1;
Worksheet.Range("B4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("B4").Interior.ColorIndex=15;
Worksheet.Range("B4").HorizontalAlignment=-4108;
Worksheet.Range("C4").Value="Третья";
Для ы=7 по 10 Цикл
Worksheet.Range("C4").Borders(ы).LineStyle=1;
Worksheet.Range("C4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("C4").Interior.ColorIndex=15;
Worksheet.Range("C4").HorizontalAlignment=-4108;
//Для группировки строк:
Worksheet.Outline.SummaryRow=0;//"итоговые" строки отображать сверху (если снизу, то 1)
//Вывод строк
Worksheet.Range("A5").Value="Объект аналитики";
Worksheet.Range("A5").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B5").Value=123.45;
Worksheet.Range("B5").Font.ColorIndex=5;
Worksheet.Range("C5").Value=678.9;
Worksheet.Range("C5").Font.ColorIndex=5;
Worksheet.Range("A6").Value="Объект аналитики";
Worksheet.Range("A6").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B6").Value=123.45;
Worksheet.Range("B6").Font.ColorIndex=3;
Worksheet.Range("C6").Value=678.9;
Worksheet.Range("C6").Font.ColorIndex=3;
Worksheet.Range("A7").Value="Объект аналитики";
Worksheet.Range("B7").Value=123.45;
Worksheet.Range("C7").Value=678.9;
Worksheet.Range("A8").Value="Объект аналитики";
Worksheet.Range("B8").Value=123.45;
Worksheet.Range("C8").Value=678.9;
Worksheet.Range("A9").Value="Объект аналитики";
Worksheet.Range("A9").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B9").Value=123.45;
Worksheet.Range("B9").Font.ColorIndex=3;
Worksheet.Range("C9").Value=678.9;
Worksheet.Range("C9").Font.ColorIndex=3;
Worksheet.Range("A10").Value="Объект аналитики";
Worksheet.Range("B10").Value=123.45;
Worksheet.Range("C10").Value=678.9;
Worksheet.Range("A11").Value="Объект аналитики";
Worksheet.Range("B11").Value=123.45;
Worksheet.Range("C11").Value=678.9;
Worksheet.Range("A12").Value="Объект аналитики";
Worksheet.Range("A12").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B12").Value=123.45;
Worksheet.Range("B12").Font.ColorIndex=5;
Worksheet.Range("C12").Value=678.9;
Worksheet.Range("C12").Font.ColorIndex=5;
Worksheet.Range("A13").Value="Объект аналитики";
Worksheet.Range("A13").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B13").Value=123.45;
Worksheet.Range("B13").Font.ColorIndex=3;
Worksheet.Range("C13").Value=678.9;
Worksheet.Range("C13").Font.ColorIndex=3;
Worksheet.Range("A14").Value="Объект аналитики";
Worksheet.Range("B14").Value=123.45;
Worksheet.Range("C14").Value=678.9;
Worksheet.Range("A15").Value="Объект аналитики";
Worksheet.Range("B15").Value=123.45;
Worksheet.Range("C15").Value=678.9;
Worksheet.Range("A16").Value="Объект аналитики";
Worksheet.Range("A16").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B16").Value=123.45;
Worksheet.Range("B16").Font.ColorIndex=3;
Worksheet.Range("C16").Value=678.9;
Worksheet.Range("C16").Font.ColorIndex=3;
Worksheet.Range("A17").Value="Объект аналитики";
Worksheet.Range("B17").Value=123.45;
Worksheet.Range("C17").Value=678.9;
Worksheet.Range("A18").Value="Объект аналитики";
Worksheet.Range("B18").Value=123.45;
Worksheet.Range("C18").Value=678.9;
//Установка рамок
Для НомСтр=5 по 18 Цикл
Для ы=7 по 10 Цикл
Worksheet.Range("A"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("B"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("C"+НомСтр).Borders(ы).LineStyle=1;
КонецЦикла;
КонецЦикла;
//Группировка строк
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//Установка числового формата
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0.00";
Исключение
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0,00";
Исключение
КонецПопытки;
КонецПопытки;
//Установка видимости приложения и его окна
Application.Visible=-1;
Window.Visible=-1;
//Закрепление области
Worksheet.Range("A5").S_elect();
Window.FreezePanes = -1;
КонецПроцедуры //Вывод
Категория:
Работа с Microsoft Office и OpenOffice Как выборочно Разрешить / Запретить редактирование ячеек листа Для 8.х в нижеследующем коде замените СоздатьОбъект на Новый COMОбъект, остальное все также:
Код 1C v 7.x //Создаем объект EXCEL
Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки);
Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа
Книга.ActiveSheet.UnProtect(); //делаем шаблон незащищенным
// Заполняем лист
...................................
// Снимаем защиту с области ввода сумм
Для Перем = 1 По 10 Цикл
// Прописываем, какие ячейки будут доступными
Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
КонецЦикла;
Книга.ActiveSheet.Protect(); // ставим защиту на лист
Категория:
Работа с Microsoft Office и OpenOffice