Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> 1С77 и Excel , Работа и взаимодействие 1С77 и Excel          
MATEVI Подменю пользователя
сообщение 29.08.09, 16:45
Сообщение #1

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Предлагаю выкладывать тут методы и примеры решения задач по взаимодействию 1С77 и Excel.
Вот что когда то находил по данному вопросу.

Получение данных из 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 - тонкая сплошная.

Это нашел на Subscribe Ru точной ссылки к сожалению нет.

Спасибо сказали: Batchir, BrveBlack, maks_75, Mariman88, mister-x, Trintintin,

MATEVI Подменю пользователя
сообщение 29.08.09, 17:17
Сообщение #2

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Вот еще пример экспорта в эксель без вывода (можно и с выводом) таблицы в 1С.
Таблицу создаем штатными методами и просто передаем готовую таблицу.


Функция ЭкспортExcel(Таблица)
Перем Excel;
Перем Каталог, ИмяФайла, Инд;
Перем ЗанятыеНомера[100];
Если ТипЗначенияСтр(Таблица) = "Таблица" Тогда
Каталог = КаталогВременныхФайлов();
ИмяФайла = ФС.НайтиПервыйФайл(Каталог + "1ctemp??.xls");
Пока ПустаяСтрока(ИмяФайла) = 0 Цикл
Инд = Число(Сред(ИмяФайла,7,2));
ЗанятыеНомера[Инд+1] = 1;
ФС.УдалитьФайл(Каталог + ИмяФайла);
ИмяФайла = ФС.НайтиСледующийФайл()
КонецЦикла;
ИмяФайла = "";
Для Инд = 0 По 99 Цикл
Если ЗанятыеНомера[Инд+1] <> 1 Тогда
ИмяФайла = Каталог + "1ctemp" + Формат(Инд, "Ч(0)2") + ".xls";
Прервать
КонецЕсли;
КонецЦикла;
Если ПустаяСтрока(ИмяФайла) = 0 Тогда
Таблица.Записать(ИмяФайла, "XLS");
Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Сообщить("Не удалось иницализировать MS Excel","!");
Возврат 0
КонецПопытки;
Excel.Workbooks.Open(ИмяФайла);
Excel.Visible = 1;
Возврат 1
Иначе
Сообщить("Ошибка записи файла """ + ИмяФайла + """","!");
Возврат 0
КонецЕсли
КонецЕсли
КонецЕсли;
Возврат 0;
КонецФункции

Спасибо сказали: mister-x,

Fynjy Подменю пользователя
сообщение 30.08.09, 10:09
Сообщение #3

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

[необходимо зарегистрироваться для просмотра ссылки]


Signature

Vofka Подменю пользователя
сообщение 31.08.09, 8:41
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Fynjy, тема про 7 wink.gif

ЗЫ. перемещаю тему в статьи smile.gif

sarius Подменю пользователя
сообщение 31.08.09, 9:16
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 219
Из: Киев
Спасибо сказали: 36 раз
Рейтинг: 0

Использую Олю для втягивания, но для выброса предпочитаю Йоксель.
Есть такая хорошая обработочка в инете - mxl2xls и есть ее продолжение для многостраничных файлов.
Если кто сталкивался с мегаотчетами - тот поймет.
Кому будет нужно - скину...


Signature
Возьму интерна (Киев)

Fynjy Подменю пользователя
сообщение 31.08.09, 10:18
Сообщение #6

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Цитата(Vofka @ 31.08.09, 10:41) *
Fynjy, тема про 7 wink.gif

ЗЫ. перемещаю тему в статьи smile.gif

Что за проблема функциии\процедуры 8 перевести в 7.7 ...


Signature

KarpovSergei Подменю пользователя
сообщение 06.09.09, 3:55
Сообщение #7

флудераст
*
Группа: Пользователи
Сообщений: 5
Из: Россия
Спасибо сказали: 0 раз
Рейтинг: 0

У меня возник такой вопросик; Можно ли даныые из Excel перенести в Word? без использования Bookmarks, что бы была конкретная привязка к определённой ячейки таблицы Word? Можно ли ячейкам таблицы Word присвоить другие номена не Cells1,4, т.е. переименовать объекты, конкретное имя для обращеня макроса который находиться в Excel?

MATEVI Подменю пользователя
сообщение 06.09.09, 19:30
Сообщение #8

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

И не в падло было в 5.55 писать?
Господа тема 1С77 & Excel

Vofka Подменю пользователя
сообщение 07.09.09, 13:54
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Серёжа, к Вам убедительная просьба: прекращайте курить что попало! Если не перестанете - пойдете в "баню"!!!

Markiz Подменю пользователя
сообщение 21.09.09, 15:35
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 15
Из: Kiev
Спасибо сказали: 18 раз
Рейтинг: 0

Вот немножко, что у меня работает:

// ===============================
// Заполнение ячейки в эксель-таблице:
//   параметры:
//    1    xl - объект Эксель = СоздатьОбъект("Excel.Application");;
//    2    Стр - строка, в к-рую помещаем данные
//    3    Кол - колонка, в к-рую помещаем данные
//    4    Значение - данные, к-рые помещаем в выбранную ячейку
//  5    шрифтРазм - размер шрифта в ячейке
//    6    шрифтЖирн - шрифт жирный / не жирный
//    7    гориз - выравнивание по горизогтали
//      1 - по значению, 2 - по левому краю, 3 - по центру
//    8    вертик -     -"-        -"- вертикали    
//      1 - верх, 2 - центр, 3 - низ)
//    9    перенос - есть ли перенос по словам
//        1 - переносить, 0 - не переносить)
//    10    линия - стиль линии обрамления ячейки
//        1 - обычная непрерывная линия
//        2 - пунктир плотный
//        3 - пунктир более разреженный
//        4 - пунктир (типа осевой) --.--.--.--
//        5 -   -"-    -"-          --..--..--..--
//        6 -   -"-    -"-          --.--.--.-- более жирный
//        7 - тонкая сплошная
//        8 - пунктир из коротких пунктиров
//        9 - двойная тонкая сплошная
//
Процедура ПоместитьЗначение(xl,Стр,Кол,Значение, шрифтРазм = 9, шрифтЖирн = 0, гориз = 2, вертик = 1, перенос = 1, линия = 0);

    Ячейка = xl.Cells(Стр,Кол);
    Ячейка.Value = Значение;
    Ячейка.Font.Size = шрифтРазм;
    Ячейка.Font.Bold = шрифтЖирн;
    Ячейка.HorizontalAlignment = гориз;
    Ячейка.VerticalAlignment = вертик;
    Ячейка.WrapText = перенос;
    Ячейка.Borders.Linestyle = линия;

КонецПроцедуры

// делаем Эксель невидимым:
    Эксель.ScreenUpdating = 0;
    Эксель.EnableEvents = 0;
    Эксель.Visible = 0;

// как выделить область:
    область = лист.Range(лист.Cells(текСтрока, 1), лист.Cells(текСтрока, 16));
    
// Borders():   1 - лево, 2 - право, 3 - верх, 4 - низ
// Weight:        1 - линия из точек, 2 - тонкая сплошная, 3 - чуть толще тонкого

   область.Borders(3).Weight = 3;

// выбор нужного листа:
    Если СоздаватьНовыйФайл = 1 Тогда    
        лист = книга.WorkSheets.Add();
        лист = книга.WorkSheets(1);
        лист.Name = "Шаблон";
    Иначе
        лист = книга.WorkSheets("Шаблон");
    КонецЕсли;    

// задание высоты сроки:
    лист.Rows(текСтрока).RowHeight = 60;
// задание ширины колонки    
    лист.Columns(1).ColumnWidth  = 13.57;


вот вроде и всё.

Спасибо сказали: mister-x,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 23:57
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!