gifts2017

(OLE 1С 7.7 - Excel) Функции для 1С:Предприятие 7.7 для работы с Excel.

Опубликовал Александр Венгер (venger) в раздел Программирование - Практика программирования

Простенькие учебные функции (с описанием) для работы с Excel через OLE.
Полностью средствами 1С, т.е. не требуют никаких внешних компонент.
Пользоваться можно бесплатно:-)
Вставляете в глобальный модуль и пользуетесь.
Цель: обучение, готовая иллюстрация подходов, возможность сразу использовать или, если нужно, доработать под свои цели.
//------------------Объявления функций:

//========= Excel (OLE) :
// (c) Venger Alex, Odessa, 2007
Функция гл8Excel_СоздатьКнигуСНужнымКолвомЛистов(Excel, РабочаяКнига, КолвоЛистов=1) Экспорт Далее
Функция гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста=1) Экспорт Далее
Функция гл8Excel_ПереименоватьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, ИмяЛиста) Экспорт Далее
Функция гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) Экспорт Далее
Функция гл8Excel_ПереименоватьЛистПоИмени(РабочаяКнига, ИмяЛиста, НовоеИмяЛиста) Экспорт Далее
Функция гл8Excel_ПолучитьЛистПоИмени(РабочаяКнига, ИмяЛиста, РабочийЛист) Экспорт Далее
Функция гл8Excel_ПолучитьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, РабочийЛист) Экспорт Далее
Функция гл8Excel_УстановитьКурсорНаЛисте(РабочийЛист, Row=1, Col=1) Экспорт Далее
Функция гл8Excel_ДобавитьКартинкуНаЛист(Excel, РабочийЛист, Row=1, Col=1, Файл) Экспорт Далее
Функция гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста(Excel, Row, Col, Лист, ПозиционироватьКурсор=0) Экспорт Далее
Функция гл8Excel_ДобавитьТЗНаЛист(Excel, Лист, ТЗ, НачСтрокаВыводаТЗвExcel=3, КопироватьЗаголовкиКолонок=1, Заголовок="") Экспорт Далее

//========= 1Сv77 Доп. служебн. :
// (c) Venger Alex, Odessa, 2007
Функция гл8ЭтоФайл(Путь) Экспорт Далее
Функция гл8ПолучитьЗначениеАтрибутаФайлаПоКоду(Путь, КодАтрибута) Экспорт Далее



//------------------Определения функций:
// Excel - ссылка на Excel (OLE). Ссылка должна существовать
// Excel=СоздатьОбъект("Excel.Application");
// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Создать новую рабочую книгу с нужным количеством листов
// Параметры:
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   РабочаяКнига - переменная куда передается ссылка на созданную книгу
//   КолвоЛистов - нужное количество листов
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_СоздатьКнигуСНужнымКолвомЛистов(Excel, РабочаяКнига, КолвоЛистов=1) Экспорт
	Перем Res;
	Res=0;
	Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100	
		Если КолвоЛистов > 0 Тогда
			Res=1;
			//Excel.Visible = 1; // Показать	
			РабочаяКнига = Excel.Workbooks.Add(); // Добавить рабочую книгу
            РабочаяКнига.Activate();
			
			// Удалить все листы, оставить один
			Колво=РабочаяКнига.WorkSheets.Count;
			Для I = 1 По Колво-1 Цикл
				//РабочаяКнига.WorkSheets(I).Select();
				Excel.Application.DisplayAlerts = 0;
				РабочаяКнига.WorkSheets(I).Delete();	
				Excel.Application.DisplayAlerts = 1;
			КонецЦикла;	
			
			// Добавить нужное количество листов
			Для I = 1 По КолвоЛистов-1 Цикл
				РабочаяКнига.WorkSheets().Add();	
			КонецЦикла;
			
			// Переименовываем листы по порядку
			Для I = 1 По КолвоЛистов Цикл
				РабочаяКнига.WorkSheets(I).Name = Строка(I);
			КонецЦикла;			
		КонецЕсли;	
	КонецЕсли;	

	Возврат Res;
КонецФункции // гл8Excel_СоздатьКнигуСНужнымКолвомЛистов
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверить, существует ли лист с заданным номером
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   НомерЛиста - номер листа, который проверяем
// Возвращаемое значение, =1 - Да, =0 - Нет
Функция гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста=1) Экспорт
	Перем Res;
	Res=0;
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если Число(НомерЛиста) > 0 Тогда
			КолвоЛистов=РабочаяКнига.WorkSheets.Count;
			Если КолвоЛистов >= НомерЛиста Тогда
				Res = 1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ЛистСНомеромСуществует
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Переименовать лист по номеру листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   НомерЛиста - номер листа, который будем переименовывать
//   ИмяЛиста - имя, которое дадим листу
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПереименоватьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, ИмяЛиста) Экспорт
	Перем Res;
	Res=0;
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если Число(НомерЛиста) > 0 Тогда
			Если ПустаяСтрока(СокрЛП(Строка(ИмяЛиста))) = 0 Тогда
				Если гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста) = 1 Тогда
					Res=1;
					РабочаяКнига.WorkSheets(Число(НомерЛиста)).Name = СокрЛП(Строка(ИмяЛиста));				
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПереименоватьЛистПоНомеру
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверить, существует ли лист с заданным именем
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   ИмяЛиста - имя листа, который проверяем
// Возвращаемое значение, =1 - Да, =0 - Нет
Функция гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) Экспорт
	Перем Res;
	Res=0;
	ИмяЛиста = Строка(СокрЛП(ИмяЛиста));
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если ПустаяСтрока(ИмяЛиста) = 0 Тогда
			КолвоЛистов=РабочаяКнига.WorkSheets.Count;
			Для I = 1 По КолвоЛистов Цикл
				Если Строка(СокрЛП(РабочаяКнига.WorkSheets(I).Name)) = ИмяЛиста Тогда
					Res = 1;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ЛистСИменемСуществует
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Переименовать лист по имени листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   ИмяЛиста - имя листа, который будем переименовывать
//   НовоеИмяЛиста - имя, которое дадим листу
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПереименоватьЛистПоИмени(РабочаяКнига, ИмяЛиста, НовоеИмяЛиста) Экспорт
	Перем Res;
	Res=0;
	ИмяЛиста = Строка(СокрЛП(ИмяЛиста));
	НовоеИмяЛиста = Строка(СокрЛП(НовоеИмяЛиста));
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если ПустаяСтрока(ИмяЛиста) = 0 Тогда
			Если ПустаяСтрока(НовоеИмяЛиста) = 0 Тогда
				Если гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) = 1 Тогда
					Res=1;
					РабочаяКнига.WorkSheets(ИмяЛиста).Name = НовоеИмяЛиста;				
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПереименоватьЛистПоИмени
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Получить ссылку на Worksheet (OLE) по имени листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   ИмяЛиста - имя листа, ссылку на который хотим получить
//   РабочийЛист - переменная, куда положим ссылку на лист
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПолучитьЛистПоИмени(РабочаяКнига, ИмяЛиста, РабочийЛист) Экспорт
	Перем Res;
	Res=0;
	ИмяЛиста = Строка(СокрЛП(ИмяЛиста));
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если ПустаяСтрока(ИмяЛиста) = 0 Тогда
			Если гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) = 1 Тогда
				Res=1;
				РабочийЛист = РабочаяКнига.WorkSheets(ИмяЛиста);
				РабочийЛист.Select();
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПолучитьЛистПоИмени
// ----------------------------------------------------------------------


// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Получить ссылку на Worksheet (OLE) по номеру листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   НомерЛиста - номер листа, ссылку на который хотим получить
//   РабочийЛист - переменная, куда положим ссылку на лист
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПолучитьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, РабочийЛист) Экспорт
	Перем Res;
	Res=0;
	НомерЛиста = Число(НомерЛиста);
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если НомерЛиста > 0 Тогда
			Если гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста) = 1 Тогда
				Res=1;
				РабочийЛист = РабочаяКнига.WorkSheets(НомерЛиста);
				РабочийЛист.Select();
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПолучитьЛистПоНомеру
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Установить курсор в нужном месте на листе
// Параметры:
//   РабочийЛист - ссылка на Worksheet (OLE). Ссылка должна существовать
//   Row - номер строки, куда устанавливаем курсор
//   Col - номер столбца, куда устанавливаем курсор
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_УстановитьКурсорНаЛисте(РабочийЛист, Row=1, Col=1) Экспорт
	Перем Res;
	Res=0;
	Row = Число(Row);
	Col = Число(Col);
	Если ТипЗначения(РабочийЛист)=100 Тогда  //OLE._Worksheet  100 
		Если (Row > 0) И (Col > 0) Тогда
			РабочийЛист.Cells(Row, Col).Select();
			Res = 1;
		КонецЕсли;
	КонецЕсли;		
	Возврат Res;	
КонецФункции // гл8Excel_УстановитьКурсорНаЛисте
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Добавить картинку из файла в нужном месте на листе
// Высота строки под картинкой устанавливается равной высоте картинки
// и первая ячейка под картинкой заполняется, чтобы можно было узнать,
// с помощью функции гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста
// где конец картинки
// Параметры:
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   РабочийЛист - ссылка на Worksheet (OLE). Ссылка должна существовать
//   Row - номер строки, куда устанавливаем картинку
//   Col - номер столбца, куда устанавливаем картинку
//   Файл - путь к файлу на диске, который добавляем на лист
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ДобавитьКартинкуНаЛист(Excel, РабочийЛист, Row=1, Col=1, Файл) Экспорт
	Перем Res;
	Res=0;
	Row = Число(Row);
	Col = Число(Col);
	Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100	
		Если ТипЗначения(РабочийЛист)=100 Тогда  //OLE._Worksheet  100 
			Если (Row > 0) И (Col > 0) Тогда
				гл8Excel_УстановитьКурсорНаЛисте(РабочийЛист, Row, Col);
				Если гл8ЭтоФайл(Файл) = 1 Тогда
					// Вставляем картинку в место, где спозиционирован курсор и выделяем ее
					РабочийЛист.Pictures.Insert(Файл).Select(); 
					// Узнаем высоту картинки, если больше 400, то уменьшаем до 400
		            Если Число(Excel.Application.Selection.ShapeRange.Height())>400 Тогда
						Excel.Application.Selection.ShapeRange.Height=400;
					КонецЕсли; 
					// Узнаем высоту картинки
					PictureHeight=Excel.Application.Selection.ShapeRange.Height(); 
					// Устанавливаем туже высоту, для строки под картинкой
					РабочийЛист.Rows(Row).RowHeight = PictureHeight;
					// Ячейку под картинкой заполняем и форматируем
					РабочийЛист.Cells(Row, Col).Value = "Картинка";
					РабочийЛист.Cells(Row, Col).HorizontalAlignment = (-4108); // По центру
					РабочийЛист.Cells(Row, Col).VerticalAlignment = (-4108); // По центру
					Res = 1;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;		
	Возврат Res;	
КонецФункции // гл8Excel_ДобавитьКартинкуНаЛист
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Определить координаты последней ячейки области данных таблицы Excel для заданного листа
// Параметры :
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   Row,Col   - возвращаемые параметры, соответственно Строка(Row) и Столбец(Col)
//   Лист - ссылка на Worksheet (OLE). Ссылка должна существовать 
//   ПозиционироватьКурсор - если >0,  то курсор устаканится на найденной ячейке, 
//                           если <=0, то останется там же, где и был
// Функция возвращает 1, если все Ok и 0 в противном случае
// Алгоритм взят: (c) Sergey Popov, Usinsk, Komi, 2003, но лист указывается не по номеру, а по ссылке
Функция гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста(Excel, Row, Col, Лист, ПозиционироватьКурсор=0) Экспорт
	Перем Res;
	Res=0;
	Row=0;
	Col=0;
    Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100      	
		Если ТипЗначения(Лист)=100 Тогда  //OLE._Worksheet  100 
            Если ЧИСЛО(ПозиционироватьКурсор)>0 Тогда
                V=ЧИСЛО(Лист.Cells.SpecialCells(11).Select);
                Если V=(-1) Тогда //стандарт OLE
                    Row = Excel.ActiveCell.Row;
                    Col = Excel.ActiveCell.Column;
                    Res=1;
                КонецЕсли;
            Иначе
                V=Лист.Range("A1").SpecialCells(11);
                Если ТипЗначения(V)=100 Тогда  //OLE.Range  100 
                    Row = V.Row;
                    Col = V.Column;
                    Res=1;
                КонецЕсли;
            КонецЕсли;
		КонецЕсли;				
	КонецЕсли;	
	Возврат Res;	
КонецФункции // гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// ТаблицаЗначений копируется в Excel.
// Параметры :
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   Лист - ссылка на Worksheet (OLE). Ссылка должна существовать
//   ТЗ - ТаблицаЗначений, которую нужно скопировать в Excel
//   НачСтрокаВыводаТЗвExcel - начальная строка в Excel, с которой будут выводиться строки ТЗ
//   КопироватьЗаголовкиКолонок - если >0, то будут скопированы Заголовки Колонок ТЗ
//   Заголовок - Заголовок, который будет скопирован в Excel перед ТЗ
// Происходит кое-какое форматирование в Excel  
// Заголовок - жирным, шрифтом большим, чем все остальное на 1
// Заголовки колонок - выравнивание по вертикали/горизонтали по центру, жирным, ячейки серого цвета
// После вывода ячейки - автоподбор ширины
// Возвращаемое значение, =1 - Ok, =0 - неудачно
// Алгоритм взят: (c) Sergey Popov, Usinsk, Komi, 2003, но указывается лист, на который слить инфу
// Плюс происходит некоторое форматирование ячеек
Функция гл8Excel_ДобавитьТЗНаЛист(Excel, Лист, ТЗ, НачСтрокаВыводаТЗвExcel=3, КопироватьЗаголовкиКолонок=1, Заголовок="") Экспорт
	Перем Res;
	Перем ЗагКол;
	Res=0;
	Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100	
		Если ТипЗначения(Лист)=100 Тогда  //OLE._Worksheet  100 
			Если ВРег(СокрЛП(ТипЗначенияСтр(ТЗ)))=ВРег("ТаблицаЗначений") Тогда
				ЗГ= СокрЛП(Заголовок);
				КолвоКол = ТЗ.КоличествоКолонок();
				КолвоСтр = ТЗ.КоличествоСтрок();
				Если КолвоКол>0 Тогда
					Res=1;
					Если ЧИСЛО(НачСтрокаВыводаТЗвExcel)>1 Тогда
						Если СтрДлина(ЗГ)>0 Тогда
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Value = ЗГ;
							// Форматирование ячеек
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Font.Bold = 1; // Жирным
							FontSize = Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Font.Size;
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Font.Size = FontSize + 1; // Увеличиваем шрифт
						КонецЕсли;
					КонецЕсли;				

					Если ЧИСЛО(КопироватьЗаголовкиКолонок)>0 Тогда
						i=0;
						Пока i<КолвоКол Цикл
							i=i+1;         
							ИдКол=СокрЛП(ТЗ.ПолучитьПараметрыКолонки(ЧИСЛО(i), , , , ЗагКол));
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Value = "'"+ЗагКол;
							// Форматирование ячеек
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).HorizontalAlignment = (-4108); // По центру
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).VerticalAlignment = (-4108); // По центру
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Font.Bold = 1; // Жирным
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Interior.ColorIndex = 15; // Серый цвет
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Interior.Pattern = 1; // Залить цветом
							Лист.Columns(i).EntireColumn.AutoFit(); // Автоподбор ширины колонки
						КонецЦикла;
					КонецЕсли;

					Если КолвоСтр>0 Тогда
						j=0;
						Пока j<КолвоСтр Цикл
							j=j+1;         
							i=0;
							Пока i<КолвоКол Цикл
								i=i+1;         
								ИдКол=СокрЛП(ТЗ.ПолучитьПараметрыКолонки(ЧИСЛО(i)));
								V=СокрЛП(ТЗ.ПолучитьЗначение(j,ИдКол));
								Лист.Cells(j+ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Value = "'"+V;
								// Форматирование ячеек
								Лист.Columns(i).EntireColumn.AutoFit(); // Автоподбор ширины колонки
							КонецЦикла;
						КонецЦикла;
					КонецЕсли;
			КонецЕсли;      				
			КонецЕсли;      
		КонецЕсли;      
	КонецЕсли;      
	Возврат Res;
КонецФункции // гл8Excel_ДобавитьТЗНаЛист
// ----------------------------------------------------------------------


//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Возвращает 1 - если Путь - это файл, 0 - в противном случае
// Если файл не существует возвращает -1
Функция гл8ЭтоФайл(Путь) Экспорт
	// 22.10.2007 	
	Перем Res; // Возвращаемое значение, число
	Перем ЧтоЭто; // Число, 1 - каталог, 0 - файл, -1 - не существует
	ЧтоЭто = гл8ПолучитьЗначениеАтрибутаФайлаПоКоду(Путь, 4);
	Если ЧтоЭто = 1 Тогда
		Res = 0;
	ИначеЕсли ЧтоЭто = 0 Тогда
		Res = 1;
	ИначеЕсли ЧтоЭто = -1 Тогда	
		Res = ЧтоЭто;
	КонецЕсли;
	Возврат Res;
КонецФункции	// гл8ЭтоФайл
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Возвращает значение заданного атрибута файла по коду, если файла нет возвращает -1
// Путь - путь к файлу или папке
// КодАтрибута может принимать след. значения:
// 1 - файл только для чтения, функция возвращает 1, если да, 0 - если нет
// 2 - скрытый файл, функция возвращает 1, если да, 0 - если нет
// 3 - системный файл, функция возвращает 1, если да, 0 - если нет
// 4 - каталог, функция возвращает 1, если да, 0 - если нет
// 5 - архивный файл, функция возвращает 1, если да, 0 - если нет
// 6 - обычный файл (все другие атрибуты не установлены), функция возвращает 1, если да, 0 - если нет
// 7 - временный файл, функция возвращает 1, если да, 0 - если нет
// 8 - файл, сжатый каким-либо архиватором, функция возвращает 1, если да, 0 - если нет
// 9 - нет доступа к файлу, функция возвращает 1, если да, 0 - если нет
Функция гл8ПолучитьЗначениеАтрибутаФайлаПоКоду(Путь, КодАтрибута) Экспорт
	// 22.10.2007 	
	Перем Res; // Возвращаемое значение, число - значение конкретного атрибута
	Перем FileSize, Attrb, TimeCreate, TimeLastOpen, TimeLastWrite, FullFileName;
	Если ФС.СуществуетФайл(Путь) = 1 Тогда
		ФС.АтрибутыФайла(Путь, FileSize, Attrb, TimeCreate, TimeLastOpen, TimeLastWrite, FullFileName);
		Res = Число(Сред(Attrb, Число(КодАтрибута), 1));
	Иначе
		Res = -1;
	КонецЕсли;
	Возврат Res;
КонецФункции // гл8ПолучитьЗначениеАтрибутаФайлаПоКоду
//----------------------------------------------------------------------

См. также

Подписаться Добавить вознаграждение

Комментарии

1. msadu msk (msadu) 27.12.08 17:43
Спасибо большое, очень помогло.
2. Евгений Мартыненков (JohnyDeath) 27.12.08 23:21
А если всё это дело обернуть в класс... ;)
3. Евгения (Enya) Воробьёва (Enya_06) 14.04.09 05:53
4. as108 (AS108) 20.05.09 02:54
Спасибо ещё и ещё раз огромное за помощь начинающим!
5. Znef 02.06.09 10:48
6. Олег (Olegpod) 14.08.09 14:45
Очень хотелось бы аналог для WORD 2003
7. Shavkat (shavminator) 18.10.09 14:18
Боооолшое спааасибо!!! ;)
8. Игорь (volcanic) 01.12.09 17:44
Большое спасибо! очень пригодилось... :D
9. Алексей Азов (unknown181538) 29.11.10 18:41
В процедуре гл8Excel_ДобавитьТЗНаЛист()
AutoFit тормозит сильно.
Как правильно вынести автоподбор из цикла?
10. Taras Shewchenko (yuyu1) 13.01.12 00:28
Не совсем по теме но!

Кто-нибудь может подсказать, как раздвинуть строки с сохранением формата ole-командами?
11. selesta (selesta) 29.03.12 23:17
думаю в добавок не хватает функции типа глПолучитьExcel или глСоздатьExcel, которая бы проверяла его наличие на компе и возвращала сам оле обьект Excel, используемых в этих функциях.
Автору спасибо!
12. olga pt (pt_olga) 04.06.12 13:57
а для ленивых всё бы это запихнуть во внешнюю обработку... никак руки не дойдут создать свою универсальную обработину для 1С77 и Эксель :(
13. SAshock 18.03.14 15:16
Пытаюсь в прайс листе вставить картинку, не получается (((, помогите плиз

РабочийЛист.Cells(Row, Col).Select();
{Глобальный модуль(588)}: Microsoft Office Excel: Метод Select из класса Range завершен неверно
14. Александр Венгер (venger) 20.03.14 20:40
(13) А какие значения переменных Row, Col, РабочийЛист в отладчике смотрели? Какая версия офиса?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа