Каталог решений - Функции работы из 1с 8.х с EXCEL (объекная модель)

Функции работы из 1с 8.х с EXCEL (объекная модель)

Функции работы из 1с 8.х с EXCEL (объекная модель)

В наличии

Надоели вопросы по ошибкам при работе с екселем, даю базовые функции, для работы.
Постю, что-бы удобнее было давать ссылку, а не искать каждый раз в конфе.

расмотрена только часть функционала, нету блочного чтения и т.д. (типа для чайников), зато обработаны большенство "грабель"

Категория:

Описание


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

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

// функция разрывает связь с 1с 7.7
// в качестве параметра требуеться структура созданая при установке соединения 
Процедура 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_РазорватьСвязь (СоответстиеЗагрузки);

has been added to your cart:
Оформление заказа