18.01.2017

Чтение (загрузка) данных в 1С 8.3 из Excel

Автор: Белозерских Евгений

     Давайте рассмотрим из каких этапов состоит выполнение обработки по чтению файлов Excel:
  1. Выбор файла (На стороне клиента)
  2. Открытие одного из листов в файле (На стороне сервера)
  3. Чтение построчно содержимого (На стороне сервера)
  4. Выполнение каких-то действий
     И для начала сделаем форму с элементами управления, как показано на рисунке

Форма загрузки

Выбор файла для обработки

     В нашем примере мы не будем использовать модальные методы, поэтому код будет иметь следующий вид
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка	= Ложь;
	
	Описание	= Новый ОписаниеОповещения("ЗакончитьВыборФайла", ЭтотОбъект);
	НачатьПомещениеФайла(Описание,,,Истина, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ЗакончитьВыборФайла(Результат, Адрес, Имя, ДопПараметры) Экспорт 
	Если Результат Тогда 
		
		ИмяФайла		= Имя;
		АдресХранения	= Адрес;
		
	КонецЕсли;
КонецПроцедуры
     Реквизит формы "ИмяФайла" содержит путь к файлу, а "АдресХранения" адрес временного хранилища на стороне сервера где находится наш файл.

Открываем первый лист файла для чтения

     Спрашиваем у пользователя уверен ли он что хочет выполнить чтение из файла, и если он уверен, то начинаем чтение и загрузку.
&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
	
	Оповещение	= Новый ОписаниеОповещения("НачатьВыполнениеЗагрузки", ЭтаФорма);
	ПоказатьВопрос(Оповещение, "Выполнить загрузку данных из файла """ + ИмяФайла + """ ?",
					РежимДиалогаВопрос.ДаНет, , , "Начало загрузки");

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

&НаКлиенте
Процедура НачатьВыполнениеЗагрузки(Результат, Параметры) Экспорт
	
    Если НЕ Результат = КодВозвратаДиалога.Да Тогда
        Возврат;
    КонецЕсли;

	РезультатЗагрузки	= ВыполнитьЗагрузкуНаСервере(АдресХранения, ПерваяСтрока,
									КолонкаАртикул, КолонкаНаименование);
	
	Если ТипЗнч(РезультатЗагрузки) = Тип("Строка") Тогда 
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = РезультатЗагрузки;
		Сообщение.Поле	= "ИмяФайла";
		Сообщение.Сообщить();
	КонецЕсли;
	
КонецПроцедуры

Читаем XLS построчно и делаем "какие-то" действия

&НаСервереБезКонтекста
Функция ВыполнитьЗагрузкуНаСервере(АдресХранения, ПерваяСтрока, КолонкаАртикул, КолонкаНаименование)

	Путь	= КаталогВременныхФайлов() + "temp.xls";
	Файл	= ПолучитьИзВременногоХранилища(АдресХранения);
	
	Файл.Записать(Путь);
	
	Попытка
		ОбъектExcel = Новый COMОбъект("Excel.Application");
	Исключение
		Возврат "Ошибка открытия MS Excel";	
	КонецПопытки;
	
	Попытка
		ОбъектExcel.WorkBooks.Open(Путь);
	Исключение
		ОбъектExcel.DisplayAlerts = 0; 
		ОбъектExcel.Quit();
		ОбъектExcel.DisplayAlerts = 1;
		
		Возврат "Ошибка открытия файла для чтения: " + Путь;	
	КонецПопытки;
	
	Попытка
		ОбъектExcel.Sheets(1).Select();
	Исключение
		ОбъектExcel.ActiveWorkbook.Close();
		ОбъектExcel = 0;
		
		Возврат "Ошибка при чтении файла: " + Путь;
	КонецПопытки;
	
	Version	= ОбъектExcel.Version;
	
	Версия = Лев(Version, Найти(Version,".") - 1 );
	
	Если Версия = "8" тогда
		ФайлСтрок	= ОбъектExcel.Cells.CurrentRegion.Rows.Count;
		ФайлКолонок = Макс(ОбъектExcel.Cells.CurrentRegion.Columns.Count, 13);
	Иначе
		ФайлСтрок	= ОбъектExcel.Cells(1,1).SpecialCells(11).Row;
		ФайлКолонок = ОбъектExcel.Cells(1,1).SpecialCells(11).Column;
	Конецесли;
	
	Для НС = ПерваяСтрока по ФайлСтрок Цикл 

		Артикул		= СокрЛП(ОбъектExcel.Cells(НС, КолонкаАртикул).Text);
		Наименование= СокрЛП(ОбъектExcel.Cells(НС, КолонкаНаименование).Text);
		// Вот здесь выполняем какие-то действия
		
	КонецЦикла;
	
	ОбъектExcel.DisplayAlerts = 0; 
	ОбъектExcel.Quit();
	ОбъектExcel.DisplayAlerts = 1;
	
КонецФункции
     После чтения не забываем закрыть Excel, иначе он останется "в нашей памяти"

Готовый пример чтения файла xls или xlsx

     Готовый пример обработки можете скачать тут.

Другие статьи

Функция вычисления контрольной цифры для штрихкода EAN-13 (EAN-8)

    Рабочая функция для вычисления контрольной цифры в штрихкоде формата EAN-13 или EAN-8

Чтение текстового файла в 1С

    Пример чтения данных текстового файла (на клиенте и сервере) при разработке в режиме управляемого приложения 1С

Чтение (Загрузка) данных из MXL в 1С 8.3

    Рабочий пример обработки чтения (загрузки) данных из MXL файла, с учетом отказа от использования модальных вызовов

Открыть форму выбора 1С 8.3

    Пример кода для открытия окна выбора элемента справочника, без использования модальных вызовов

Чтение и загрузка DBF в 1С 8.3

    Пример программного кода для чтения и/или записи файлов в формате DBF

Выгрузка объекта «1С» в XML и загрузка объекта из XML файла

    Пример выгрузки объекта информационной базы (СправочникОбъект, ДокументОбъект) «1С» в XML файл, и пример обратной загрузки объекта из XML файла

Выгрузка и загрузка XML через DOM

    Полезный пример того, как можно выгрузить в XML данные и загрузить обратно через DOM. Обработка осуществляется при помощи таких объектов как: ЗаписьXML, ЧтениеXML, ЗаписьDOM, ДокументDOM, ПостроительDOM.

HTTP запрос в 1С средствами «WinHttpRequest»

    Пример реализации HTTP запроса в 1С, средствами «WinHttpRequest» 

Программное изменение расписания фонового задания 1С 8.3

   Пример программного кода, для редактирования расписания выполнения фонового задания в 1С 8.3 в режиме отказа использования модальных вызовов

Оформление строк табличной части 1С 8.3

    Пример условного оформления элементов формы, в частности строк табличной части в 1С 8.3 (управляемые формы)

Обработка заполнения табличной части в 1С 8.3

    В статье рассматривается разработка обработки заполнения табличной части на примере конфигурации 1С:ERP
 

Запрос к таблице значений 1С 8.3

    В статье описан простой пример того, как можно сформировать запрос 1С к данным таблицы значений, т.е. как передать таблицу значений в параметр запроса
 

Динамическое создание колонок в таблице на форме 1С (Обычное приложение)

     Практический пример того, каким образом в таблице на форме (в режиме обычного приложения 1С), можно динамически создавать необходимое количество колонок, с возможностью установки обработки событий (например "ПриИзменении" в ячейке таблицы)

Динамическое создание колонок в таблице на форме 1С 8.3

      Практический пример того, каким образом в управляемом интерфейсе можно создавать и удалять колонки в таблице значений на форме

Сохранение и восстановление настроек 1С 8.3

    Пример работы с хранилищем настроек 1C, для программного сохранения и получения сохраненных настроек

Внешняя печатная форма 1С 8.3

      Изменения в печатных формах, как и разработка новых, одна из самых распространенных задач. И для этих целей предназначен механизм внешних печатных форм, используемый в конфигурациях 1С.

Определение даты создания ссылки в 1С

Определяем дату создания ссылки по уникальному идентификатору объекта 1С

Программное создание команды и кнопки на форме 1С 8.3

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

Открыть форму созданного объекта (Справочник, документ в 1С 8.2, 8.3)

Создаем новый объект, НЕ записываем его в базу, и открываем форму