chtenie_excel_v_tablicu_znachenij

&НаКлиенте
Процедура ФайлExcelНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	

	СтандартнаяОбработка	=	Ложь;
	
	ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбора.Заголовок = "Выберите файл";
	ДиалогВыбора.Фильтр	="Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|";	
	
	Если ДиалогВыбора.Выбрать() Тогда
		ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
	КонецЕсли;	
		
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьExcelФайл(Команда)
	
	ОчиститьСообщения();
	
	Если ПустаяСтрока(ИмяФайла) Тогда Возврат; КонецЕсли;
	
	//Логируем
	LogФайл = Новый ТекстовыйДокумент;
	
	мсооб	=	Новый СообщениеПользователю;
	мсооб.Текст	=	""+ТекущаяДата()+": Начало обработки.";
	LogФайл.ДобавитьСтроку(мсооб.Текст);
	мсооб.Сообщить();

	Excel	=	ПодключитьсяКЭкселю();
	Если Excel=Неопределено Тогда Возврат; КонецЕсли;	
	Книга = Excel.WorkBooks.Open(ИмяФайла);
	Лист = Книга.WorkSheets(1);
	
	ВсегоКолонок 	= Лист.Cells(1,1).SpecialCells(11).Column;
	ВсегоСтрок 		= Лист.Cells(1,1).SpecialCells(11).Row;	
	ИсточникКодВ1	= ОпределитьЧтоЕстьКод(СокрЛП(Лист.Cells(2,1).Value));
	НаборСтрокФайла = новый массив;
	СчетчикПроблемныхПозиций	=	0;
	
	
	//Начинаем с второй строки в первой шапка)
	для Строка = 2 по ВсегоСтрок цикл
		
		//Находим номенклатуру по ШК
		Код_товара								=	СокрЛП(Лист.Cells(Строка,ЭксельНомерКолонкиСКодом).Value);
		
		Если не ЗначениеЗаполнено(Код_товара) И ЗначениеЗаполнено(СокрЛП(Лист.Cells(Строка,15).Value)) Тогда
			мсооб	=	Новый СообщениеПользователю;
			ИмяПозиции1	=	"("+СокрЛП(Лист.Cells(Строка,15).Value)+")";
			ИмяПозиции2	=	" ("+СокрЛП(Лист.Cells(Строка,2).Value)+")";
			ОбщеИмяПозиции	= ИмяПозиции1+ИмяПозиции2;
			мсооб.Текст	=	""+ТекущаяДата()+": Для позиции "+ОбщеИмяПозиции+" не указан код на PromUa";
			LogФайл.ДобавитьСтроку(мсооб.Текст);
			мсооб.Сообщить();
			Продолжить; 
		ИначеЕсли не ЗначениеЗаполнено(Код_товара) Тогда 
			Продолжить;
		КонецЕсли;
		
		
		Если ЗначениеЗаполнено(СокрЛП(ЭксельКолдПозицииДляОбработки)) И Код_товара<>СокрЛП(ЭксельКолдПозицииДляОбработки) Тогда Продолжить; КонецЕсли;
			
		НоменклатураИлиХарактеристикаПоШтрихКоду	=	НайтиПозициюПоШК(Код_товара);		
		
		
		//Проверяем колонку с номером группы разновидностй
		ID_группы_разновидностей					=	СокрЛП(Лист.Cells(Строка,ЭксельНомерКолонкиСКодомГруппы).Value);		
		ЭтоВторостепеннаяХарактеристика=УжеЕстьВТЗУжеОбработанных(Код_товара,ID_группы_разновидностей);	
		
 		НовыйГуид	=	ПолучитьГУИДНоменклатурыИДИХарКИ(НоменклатураИлиХарактеристикаПоШтрихКоду,ЭтоВторостепеннаяХарактеристика,Код_товара,СчетчикПроблемныхПозиций,ID_группы_разновидностей,LogФайл,ОбщеИмяПозиции);	
	
		Если СокрЛП(строка(Лист.Cells(Строка,ЭксельНомерКолонкиСГУИД1С).Value))<>СокрЛП(строка(НовыйГуид)) Тогда 
			ЭксельКолВоИзмененныхЗаписией	=	ЭксельКолВоИзмененныхЗаписией+1;			
			Лист.Cells(Строка,ЭксельНомерКолонкиСГУИД1С).Value	= строка(НовыйГуид);
		КонецЕсли;
		
		//Обновляем индикатор прогресса
		ИндикаторОбработкиExcel	=	Строка;
				
		//Заглушка если нужно остановить цикл
		Если КоличествоСтрокДляОбработки>0 И Строка=(КоличествоСтрокДляОбработки+1) Тогда
			ОтключитьсяОтЭкселя(Excel,ИмяФайла);
			Прервать;
		КонецЕсли;
				
	КонецЦикла;
		
	//сохранить и Закрываем эксель
	ОтключитьсяОтЭкселя(Excel,ИмяФайла);
	
	//Закрываем лог
	LogФайл.ДобавитьСтроку(""+ТекущаяДата()+": Обработка завершена");
	Если ЭксельСохранятьЛог Тогда 
		LogФайл.Записать(ЭксельПутьДляСохраненияЛога,КодировкаТекста.UTF8,Символы.ВК + Символы.ПС);
	КонецЕсли;
	
	мсооб	=	новый СообщениеПользователю;
	мсооб.Текст	=	"Отчет сохранен в файле: "+ЭксельПутьДляСохраненияЛога;
	мсооб.Сообщить();
	
КонецПроцедуры
&НаКлиенте
Функция ПодключитьсяКЭкселю()
	
	Excel	=	Неопределено;
	
	Попытка
		Excel = Новый COMОбъект("Excel.Application");
	Исключение
		Сообщить("Ошибка при открытии файла с помощью Excel! Возможно не устанволен Эксель на этом ПК");
		Сообщить(ОписаниеОшибки());
		
		Excel.DisplayAlerts = 0; 
		Excel.ActiveWorkbook.Close();
		Excel.DisplayAlerts = 1;
		Excel.Application.Quit();
		Excel = Неопределено;
		Возврат Excel;
	КонецПопытки;
	
	Возврат Excel;
	
КонецФункции
&НаКлиенте
Процедура ОтключитьсяОтЭкселя(Excel,ИмяФайла)
	
	Если Excel<>Неопределено Тогда 
		
		ПолныйПутьНовоеИмяФайла	=	СгенерироватьНовоеИмяФайла(ИмяФайла);
		Excel.ActiveWorkBook.SaveAs(ПолныйПутьНовоеИмяФайла);
		
		Excel.DisplayAlerts = 0; 
		Excel.ActiveWorkbook.Close();
		Excel.DisplayAlerts = 1;
		Excel.Application.Quit();
		Excel = Неопределено;
		ХранилищеТЗ	=	"";
		
		мсооб	=	Новый СообщениеПользователю;
		мсооб.Текст	=	""+ТекущаяДата()+": Загрузка завершена.Новый файл сохранен по адресу: "+ПолныйПутьНовоеИмяФайла;
		мсооб.Сообщить();
		
	КонецЕсли;
	
КонецПроцедуры
&НаКлиенте
Функция СгенерироватьНовоеИмяФайла(СтароеИмя)
	
толькоимя	=	СтрНайти(СтароеИмя,".xlsx")-1;

НовоеИмя	=	Лев(СтароеИмя,толькоимя)+"_new.xlsx";
	
Возврат НовоеИмя;	
	
КонецФункции
  • /sites/data/pages/chtenie_excel_v_tablicu_znachenij.txt
  • Последнее изменение: 2021/02/18 20:58
  • tro