HelpF.pro

Подключение к EXCEL и чтение данных из листа Excel

Код 1C v 8.х
 Ex = Новый COMObject("Excel.Application");
Ex.Workbooks.Open(Путь);
Ex.Visible = 1;
ТекЛист=Ex.WorkSheets(1);
Для Ячейка = 1 по 400 цикл
Если НЕ ТекЛист.Cells(Ячейка,1).Value = Неопределено тогда
Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value));
Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value));
Если Карта.Пустая() тогда
Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1));
иначе
Объект = Карта.ПолучитьОбъект();
Объект.ОсновнойПоставщик = ОсновнойКлиент;
Объект.Записать();
конецесли;
конецесли;
конеццикла;


Примеры процедур для чтения данных из EXCEL

Код 1C v 8.х
 
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_ADO(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0) Экспорт

#Если Клиент Тогда
Состояние("Установка соединения с Excel");
#КонецЕсли

//ЗаголовкиВСтроке1 = "HDR=YES;"
ЗаголовкиВСтроке1 = "HDR=NO;";

СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(пФайл) +" ;Extended Properties=""Excel 8.0;" + ЗаголовкиВСтроке1 + "IMEX=1;""";

Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionString = СтрокаСоединения;

Попытка
Connection.Open();
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;

RS = Новый COMОбъект("ADODB.Recordset");

ТекстЗапроса =
"S_elect
| Лист.*
|FROM
| [" + пЛист + "$] as Лист";

Попытка
RS.Open(ТекстЗапроса, Connection);
Исключение
Сообщить ("Проблемы с выполнением запроса");
Возврат Неопределено;
КонецПопытки;

Таблица = Новый ТаблицаЗначений;

Если СтруктураКолонок = Неопределено Тогда

Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
Колонка = Таблица.Колонки.Добавить("К" + Счетчик, , Поле.Name);
КонецЦикла;

Иначе

Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;

КонецЕсли;

НомерСтроки = 0;
КолвоСтрок = RS.RecordCount;

Пока RS.EOF() = 0 Цикл

НомерСтроки = НомерСтроки + 1;

#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли

Если НомерСтроки < НачСтрока Тогда
RS.MoveNext();
Продолжить;
КонецЕсли;

Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда
Прервать;
КонецЕсли;

НоваяСтрока = Таблица.Добавить();

Если СтруктураКолонок = Неопределено Тогда

Для Счетчик = 1 По RS.Fields.Count Цикл

Поле = RS.Fields.Item(Счетчик - 1);
НоваяСтрока["К" + Счетчик] = Поле.Value;

КонецЦикла;

Иначе

Для каждого КлючИЗначение Из СтруктураКолонок Цикл

Поле = RS.Fields.Item(КлючИЗначение.Значение - 1);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;

КонецЦикла;

КонецЕсли;

// Обработка других полей
RS.MoveNext();

КонецЦикла;

// Завершение работы

RS.Close();
Connection.Close();

Возврат Таблица;

КонецФункции

// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COM(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт

#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли

Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;

Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;

Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Таблица = Новый ТаблицаЗначений;

Если СтруктураКолонок = Неопределено Тогда

Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;

Иначе

Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;

КонецЕсли;

НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);

Для НомерСтроки = НачСтрока По КонСтрока Цикл

#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КонСтрока));
ОбработкаПрерыванияПользователя();
#КонецЕсли

НоваяСтрока = Таблица.Добавить();

Если СтруктураКолонок = Неопределено Тогда

Для НомерКолонки = 1 По КолвоКолонок Цикл

Поле = Лист.Cells(НомерСтроки, НомерКолонки);
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Поле.Value;

КонецЦикла;

Иначе

Для каждого КлючИЗначение Из СтруктураКолонок Цикл

Поле = Лист.Cells(НомерСтроки, КлючИЗначение.Значение);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;

КонецЦикла;

КонецЕсли;

КонецЦикла;

XLSОбъект.Application.Quit();
Возврат Таблица;

КонецФункции

// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COMArray(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт

#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли

Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;

Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;

Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

Таблица = Новый ТаблицаЗначений;

Если СтруктураКолонок = Неопределено Тогда

Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;

Иначе

МаксимальныйНомерКолонки = 0;
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение);
КонецЦикла;

КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки);

КонецЕсли;

НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);

// Массив типа COMSafeArray
Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value;
КолвоСтрок = Массив.GetUpperBound(1);

Для НомерСтроки = 1 По КолвоСтрок Цикл

#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли

НоваяСтрока = Таблица.Добавить();

Если СтруктураКолонок = Неопределено Тогда

Для НомерКолонки = 1 По КолвоКолонок Цикл

НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки);

КонецЦикла;

Иначе

Для каждого КлючИЗначение Из СтруктураКолонок Цикл

НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetValue(КлючИЗначение.Значение, НомерСтроки);

КонецЦикла;

КонецЕсли;

КонецЦикла;

XLSОбъект.Application.Quit();
Возврат Таблица;

КонецФункции

// Функция получает список листов Excel
//
// Параметры:
// пФайл - Имя файла
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// СписокЗначений
//
Функция Excel_ПолучитьСписокЛистов(пФайл, XLSОбъект = Неопределено) Экспорт

Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;

Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Возврат Новый СписокЗначений;
КонецПопытки;

СписокЛистов = Новый СписокЗначений;
Для каждого Лист Из XLSОбъект.Sheets Цикл
СписокЛистов.Добавить(Лист.Name);
КонецЦикла;

XLSОбъект.Application.Quit();
Возврат СписокЛистов;

КонецФункции


Код 1C v 7.x
 Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
РабочиеКниги=Excel.WorkBooks; // создаем рабочую книгу

Попытка // открываем файл
Отчет=РабочиеКниги.Open(Каталог+ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки()+"; фаил с макросом не найден!");
Возврат;
КонецПопытки;

// заносим в таблицу какие-либо данные

Лист = Отчет.Worksheets(1);

Для Ном=1 По 20 Цикл
Ячейка = Лист .Cells(ном,1); Ячейка.Value;
Сообщить(Ячейка );
КонецЦикла;

Excel.Visible=1;

Попытка
Отчет.Save();
Исключение
Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!");
Возврат;
КонецПопытки;

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/166.html