Обработка запускается как внешняя из пользовательского режима. Выбирается путь к файлу Excel (*.xlsx;*.xls;) и происходит загрузка данных из файла по этому пути. Как таковой загрузки никаких данных тут не происходит, и обработка строк условная. Также, для упрощения, чаще всего Выбор файла и Выгрузку/Загрузку данных выполняю в одной процедуре, тут разбил для наглядности.
Все тесты производились на платформе 8.3.20.1914, однако код отработает на любой из 8.2, 8.3.
Команда выбора файла на клиенте
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "(*.xlsx;*.xls;)|*.xlsx;*.xls;|" + "(Все файлы)|*.*";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
ДополнительныеПараметры = Новый Структура("ДиалогОткрытияФайла", ДиалогОткрытияФайла);
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтаФорма, ДополнительныеПараметры);
ДиалогОткрытияФайла.Показать(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
Если (ВыбранныеФайлы <> Неопределено) тогда
ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Команда загрузки данных из Excel
&НаКлиенте
Процедура ВыполнитьЗагрузку(Команда)
Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
Сообщить("Файл не выбран!");
Возврат;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ПутьКФайлу);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
// Получим количество строк и колонок
// В разных версиях Excel получаются по-разному, поэтому сначала определим версию
Версия = Лев(Excel.Version, Найти(Excel.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;
КонецЕсли;
МассивСтруктур = Новый Массив;
Для j = 2 По ФайлСтрок цикл
Состояние("Состояние загрузки", Цел(j*100/ФайлСтрок), "Пояснение", БиблиотекаКартинок.Загрузить);
СтруктураПозиций = Новый Структура;
СтруктураПозиций.Вставить("Номенклатура", СокрЛП(Excel.ActiveSheet.Cells(j, 1).Value));
СтруктураПозиций.Вставить("ШтрихКод", СокрЛП(Excel.ActiveSheet.Cells(j, 2).Value));
СтруктураПозиций.Вставить("ЕдиницаИзмерения", СокрЛП(Excel.ActiveSheet.Cells(j, 3).Value));
СтруктураПозиций.Вставить("Цена", СокрЛП(Excel.ActiveSheet.Cells(j, 4).Value));
СтруктураПозиций.Вставить("Количество", СокрЛП(Excel.ActiveSheet.Cells(j, 5).Value));
СтруктураПозиций.Вставить("Сумма", СокрЛП(Excel.ActiveSheet.Cells(j, 6).Value));
МассивСтруктур.Добавить(СтруктураПозиций);
КонецЦикла;
ВыполнитьЗагрузкуНаСервере(МассивСтруктур);
Excel.workbooks.Close();
Excel.Quit();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере(МассивСтруктур)
// Вставить содержимое обработчика.
КонецПроцедуры
Команда выгрузки данных в Excel
&НаКлиенте
Процедура ВыполнитьВыгрузку(Команда)
Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не выбран файл. Выберите файл и повторите попытку!";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
НоваяКнига = Excel.WorkBooks.Add();
Лист = НоваяКнига.WorkSheets(1);
// Заполним наименования колонок
Лист.Cells(1, 1).Value = "ФИО"; // Значение
Лист.Cells(1, 1).Font.Bold = 1; // Ширный фрифт
Лист.Cells(1, 2).Value = "Дата рождения";
Лист.Cells(1, 2).Font.Bold = 1;
// Получим данные
МассивСтруктур = ПолучитьДанныеФизЛиц();
КоличествоСтрок = МассивСтруктур.Количество() - 1;
// Заполним Эксель
Для Строка = 0 По КоличествоСтрок Цикл
Лист.Cells(Строка + 2, 1).Value = СокрЛП(МассивСтруктур[Строка].ФИО);
Лист.Cells(Строка + 2, 2).Value = СокрЛП(МассивСтруктур[Строка].ДатаРождения);
КонецЦикла;
Попытка
НоваяКнига.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Excel.Quit();
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеФизЛиц()
МассивДанных = Новый Массив();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.ФИО КАК ФИО,
| ФизическиеЛица.ДатаРождения КАК ДатаРождения
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| НЕ ФизическиеЛица.ПометкаУдаления";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("ФИО", Выборка.ФИО);
СтруктураДанных.Вставить("ДатаРождения", Выборка.ДатаРождения);
МассивДанных.Добавить(СтруктураДанных);
КонецЦикла;
Возврат МассивДанных;
КонецФункции
Данный шаблон выгрузки / загрузки данных из Excel был добавлен для ускорения поиска нужного кода и разработки.
Статья будет дорабатываться, т.к. возможностей при выгрузке в Excel и загрузке данных из Excel больше, чем представлено.
Делал на платформе 8.3.20.1914.