Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Функции работы из 1с 8.х с Excel (объекная модель)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Не наши статьи > 1С:Предприятие 8.2
Vofka
Надоели вопросы по ошибкам при работе с екселем, даю базовые функции, для работы.
Постю, что-бы удобнее было давать ссылку, а не искать каждый раз в конфе.
Рассмотрена только часть функционала, нету блочного чтения и т.д. (типа для чайников), зато обработаны большенство "грабель"

// функция устанавливает связь с EXCEL
// в качестве параметра требуется имя открываемого файла
// в случае удачи возвращает соответствие из обьектов ОЛЕ, в случае не удачи - неопределено
Функция   EXCEL_УстановитьСвязь (ИмяФайла)Экспорт
    
    Результат = Неопределено;
    #Если Клиент Тогда
        Состояние("Идет установка связи, ждите.....");
    #КонецЕсли
    
    Попытка
        Результат = Новый Соответствие();
        
        BaseOLE = Новый COMОбъект("Excel.Application");
        Результат.Вставить("EXCEL", BaseOLE);
        
        ExcelФайл = BaseOLE.WorkBooks.Open (ИмяФайла);
        Результат.Вставить("ExcelФайл", ExcelФайл);
                                
        МассивЛистов = Новый Массив();
        КоличествоЛистов = ExcelФайл.Sheets.Count;
        Для е = 1 по КоличествоЛистов Цикл
            МассивЛистов.Добавить(ExcelФайл.Sheets(е));            
        КонецЦикла;
        
        Результат.Вставить("Листы", МассивЛистов);

    Исключение
        Результат = Неопределено;
        #Если Клиент Тогда
            Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки());
        #КонецЕсли
    КонецПопытки;
    
    Возврат Результат;
КонецФункции


// функция разрывает связь с EXCEL
// в качестве параметра требуеться структура созданая при установке соединения
Процедура EXCEL_РазорватьСвязь (Соответстие) Экспорт
    Попытка
        Соответстие["EXCEL"].DisplayAlerts = 0;
        Соответстие["ExcelФайл"].Close();
        Соответстие["EXCEL"].DisplayAlerts = 1;
        Соответстие["EXCEL"].Quit();
        Соответстие["EXCEL"] = Неопределено;
    Исключение
        #Если Клиент Тогда
            Сообщить(ОписаниеОшибки());
        #КонецЕсли
    КонецПопытки;                  
КонецПроцедуры


// функция получает данные ячейки и возвращаеть структуру соответствий, или неопределено в случае неудачи
//
// В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам
//
Функция EXCEL_ПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки, ПолучатьТекстФормулы = ложь, ПолучатьОформление = ложь)
    Результат = Новый Соответствие();
    
    Попытка
        ТекущееЗначениеФормулы = ExcelЛист.Cells(НомерСтроки, НомерКолонки).Formula;
        Если ТекущееЗначениеФормулы <> "" Тогда
            Если Лев(ТекущееЗначениеФормулы, 1) <> "=" Тогда
                Результат.Вставить("ЭтоФормула", Ложь);
                Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
            Иначе
                Результат.Вставить("ЭтоФормула", Истина);
                Если Лев(СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).text),1) = "#" Тогда
                    Результат.Вставить("ЗначениеЯчейки", Неопределено);
                Иначе
                    Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
                КонецЕсли;

                Если ПолучатьТекстФормулы Тогда  
                    Результат.Вставить("ТекстФормулы", СокрЛП(ТекущееЗначениеФормулы));
                КонецЕсли;
            КонецЕсли;
        Иначе
            Результат.Вставить("ЭтоФормула", Ложь);
            Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
        КонецЕсли;    
        
        Если ПолучатьОформление Тогда
            Результат.Вставить("ЦветЯчейки", СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).Interior.ColorIndex));
            // здесь можно добавить и другие....
        КонецЕсли;
        
    Исключение
        Результат = Неопределено;
    КонецПопытки;
    
    Возврат Результат;
КонецФункции

// функция получает данные ячейки и значение
//
// В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам
//
Функция EXCEL_ПолучитьЗначениеЯчейки2 (ExcelЛист, НомерСтроки, НомерКолонки)
    Результат = EXCEL_ПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки);
    
    Если Результат = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Возврат Результат["ЗначениеЯчейки"];
КонецФункции


//
// пример использования:
//


// будем подключаться
СоответстиеЗагрузки = EXCEL_УстановитьСвязь (ТекущийФайл.ПолноеИмя);
        
Если СоответстиеЗагрузки = Неопределено тогда
    Возврат;
КонецЕсли;
        
Для каждого ТекущаяСтраница из СоответстиеЗагрузки["Листы"] Цикл
    Значение_X1Y1 = EXCEL_ПолучитьЗначениеЯчейки2 (ТекущаяСтраница, 1, 1);
КонецЦикла;

// теперь отключаемся...
EXCEL_РазорватьСвязь (СоответстиеЗагрузки);


необходимо зарегистрироваться для просмотра ссылки
MATEVI
Выгрузка табличного документа на определенный лист книги Excel
ИменаФайлов = Новый Массив(3);
ТабличныйДокумент = Новый ТабличныйДокумент;
Для ИндексМассива = 0 По 2 Цикл        
    ТабличныйДокумент.Область(1, 1, 10, 10).Текст = "Лист №" + (ИндексМассива + 1);
    ИменаФайлов[ИндексМассива] = "C:\Тестовая книга (" + (ИндексМассива + 1) + ").xls";
    ТабличныйДокумент.Записать(ИменаФайлов[ИндексМассива], ТипФайлаТабличногоДокумента.XLS);
КонецЦикла;    
xl = Новый COMОбъект("excel.application");    
ГлавнаяКнига = xl.workbooks.open(ИменаФайлов[0]);
ПервыйЛист = ГлавнаяКнига.worksheets(1);    
ПервыйЛист.name = "Лист №1";    
Для ИндексМассива = -2 По -1 Цикл    
    ТекущаяКнига = xl.workbooks.open(ИменаФайлов[-ИндексМассива]);    
    ТекущийЛист = ТекущаяКнига.worksheets(1);    
    ТекущийЛист.name = "Лист №" + (-ИндексМассива + 1);    
    ТекущаяКнига.saved = Истина;        
    ТекущийЛист.copy(, ПервыйЛист);    
    ТекущаяКнига.close();    
    Попытка        
        УдалитьФайлы(ИменаФайлов[-ИндексМассива]);    
    Исключение        
    КонецПопытки;    
КонецЦикла;    
Окно = xl.activewindow;    
Окно.displayworkbooktabs = Истина;    
Окно.tabratio = 0.5;    
ГлавнаяКнига.save();    
ПервыйЛист.select();        
xl.visible = Истина;

необходимо зарегистрироваться для просмотра ссылки
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.