Вопрос № 109039: Вопрос по 1с7.7:
Пытаюсь создать объект ole Excel.
Но как объект 1с его не видит. текст процедуры в приложении.
Может подскажете в чем причина?...Вопрос № 109104: Здравствуйте уважаемые эксперты.
1с 7.7
Есть документ с некоторым количеством колонок. Пускай К1,К2...
Мне нужно установить некое значение в колонку в зависимости от значения переменной Х="К1" или "К2"... Как мне в про...
Вопрос № 109.039
Вопрос по 1с7.7:
Пытаюсь создать объект ole Excel.
Но как объект 1с его не видит. текст процедуры в приложении.
Доступ из 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 (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? " > < |.
Приложение:
Ответ отправил: Dmitry Stashenko (статус: Студент)
Ответ отправлен: 12.11.2007, 11:57
Отвечает: DERL.KG !!! Здравствуйте, Оксана/kasy! OLE объекты создаются через CreateObject, а не СоздатьОбъект
Ответ отправил: DERL.KG (статус: 7-ой класс)
Ответ отправлен: 12.11.2007, 13:45 Оценка за ответ: 4 Комментарий оценки: Пробовала и СоздатьОбъект и CreateObject, все равно получается исключение.
Отвечает: Сергей Максименко [Elric]
Здравствуйте, Оксана/kasy!
У Вас скорее всего некорректно установлен MS Excel (или вообще стоит OpenOffice). Участок модуля у Вас в Приложении написан абсолютно корректно и много раз использовался на практике.
--------- В творчестве рождается истина
Здравствуйте уважаемые эксперты.
1с 7.7
Есть документ с некоторым количеством колонок. Пускай К1,К2...
Мне нужно установить некое значение в колонку в зависимости от значения переменной Х="К1" или "К2"... Как мне в процедуре получить доступ к колонке имея значение Х. Перебор через если то иначе не предлагать.
Отвечает: Dmitry Stashenko
Здравствуйте, Александр Павлович!
Если я правильно вас понял, то речь идет о методе УстановитьАтрибут(). В вашем случае имея колонки К1 и К2, и переменную Х, которая содержит либо К1, либо К2, это выглядит так: УстановитьАтрибут(Х, Значение). Соответственно, частный случай для колонки К1 - это УстановитьАтрибут("К1", Значение). Прошу только учесть, что для документа помимо колонки еще важна строка, в которую производится запись значения.
Ответ отправил: Dmitry Stashenko (статус: Студент)
Ответ отправлен: 12.11.2007, 19:23 Оценка за ответ: 5
Отвечает: Астафьев Александр Николаевич
Здравствуйте, Александр Павлович! Создаем список значений как переменную для всего модуля т.е. в самом верху модуля пишем:
Перем сп;
В процедуре ПриОткрытии() пишем:
сп = СоздатьОбъект("СписокЗначений");
сп.ДобавитьЗначение("Проц_О","опт");
сп.ДобавитьЗначение("Проц_Мо","Мелкопт");
сп.ДобавитьЗначение("Проц_Р","розница");
Создаем Процедуру например:
Процедура ИнфоКолонки()
Поз = сп.НайтиЗначение(Форма.ТекущаяКолонка());
Если поз = 0 Тогда
Сообщить("ничего");
Иначе
сооб = ""; сп.ПолучитьЗначение(поз,сооб)
Сообщить(сооб);
КонецЕсли;
КонецПроцедуры
Честно говоря было плохо понятна связь вашей переменной Х="К1" или "К2"... и примера из приложения. Написал как понял вопрос. При достаточно большом количестве колонок в таблице документа код будет короче чем у Вас.
Ответ отправил: Астафьев Александр Николаевич (статус: 5-ый класс)
Ответ отправлен: 12.11.2007, 20:15 Оценка за ответ: 5 Комментарий оценки: Отлично
Отвечает: Ромашов Евгений Николаевич
Здравствуйте, Александр Павлович!