Excel файл как Внешний источник данных Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа "Внешние источники данных" и назовем его просто "Excel".
2. На закладке "Данные" созданного объекта "Excel" добавляем новую таблицу. При этом появится окно мастера добавления таблицы внешнего источника.
Выбираем первый пункт "Вручную", т.к. лично у меня второй пункт "Выбрать из списка таблиц внешнего источника данных" работает нестабильно.
Если Вы все же хотите попробовать добавить таблицу через второй пункт, то в качестве строки соединения в появившемся окне указываем:
Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Documents and Settings\Admin\Мои документы\finance3.xls; DriverID=790
В этой строке укажите путь к своему файлу. Имя пользователя и пароль я не указывал.
Отмечу, что путь к файлу и строка соединения в дальнейшем не запоминается и нужны эти параметры единожды, чтобы создать автоматически описание полей таблицы источника.
Если соединение прошло нормально, то должен отобразиться список таблиц источника. Флажком можно выбрать нужную таблицу и ее поля.
3. Даем имя новой таблице "Данные". Переходим на вкладку таблицы "Данные". В поле "Имя в источнике данных" указываем имя листа в файле Excel и добавляем в конце знак "$". В моем случае это "Данные$". В табличной части "Поля" добавляем поля и редактируем их тип.
У каждого поля в свойствах должно быть задано как минимум "Имя" и "Имя в источнике данных".
4. Создаем процедуру в которой пишем подключение к источнику и запрос:
Код 1C v 8.х ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения. СтрокаСоединения=
"Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Documents and Settings\Admin\Мои документы\finance2.xls; DriverID=790" ;
ВнешниеИсточникиДанных. Excel. УстановитьОбщиеПараметрыСоединения( ПараметрыСоединения) ;
ВнешниеИсточникиДанных. Excel. УстановитьСоединение( ) ;
Запрос = Новый Запрос( ) ;
Запрос. Текст = "ВЫБРАТЬ
| Данные.date КАК Дата,
| Данные.time КАК Время,
| Данные.account КАК Счет,
| Данные.amount КАК Сумма,
| Данные.currency КАК Валюта,
| Данные.category КАК Категория,
| Данные.parent КАК КатегорияРодитель
|ИЗ
| ВнешнийИсточникДанных.Excel.Таблица.Данные КАК Данные" ;
ТЗ = Запрос. Выполнить( ) . Выгрузить( ) ;
Вот и все!
Источник:
passion-programmer
Параметры соединения для файла Excel выглядят вот так:
Файлы XLSX (версия Office 2007 и выше)
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=D:\ФайлExcel.xlsx;
Файлы XLS (ранее)
Driver={Microsoft Excel Driver (*.xls)}; DriverID=790; DBQ=D:\ФайлExcel.xls; Категория:
Внешние источники данных Универсальная функция для чтения данных из Excel в 1С Иногда требуется разобрать данные из Excel в 1С.
Я считаю что легче и быстрей поместить все данные в ТаблицуЗначений и уже там ими манипулировать.
Пример 2-х функций которые я использую:
ИзExcelВТаблицу – Читает Excel в ТаблицуЗначений
ЭлементСправочника – Создает или находит элемент справочника.
Теперь сам код:
Код 1C v 8.х
Функция ИзExcelВТаблицу(ПутьДоExcel, НомерСтраницы = 1, ПерСтрокаЗаголовок = Ложь , ФормаИндикатора = Неопределено)
Попытка
Док = ПолучитьCOMОбъект( ПутьДоExcel) ;
Исключение
Сообщить( "Произошла ошибка при обращение к Excel:" + Символы. ПС + ОписаниеОшибки( ) ) ;
Возврат Неопределено ;
КонецПопытки ;
ЗакрытьФормуИндиктаора = Ложь ;
Если ФормаИндикатора = Неопределено тогда
ЗакрытьФормуИндиктаора = Истина ;
ФормаИндикатора = ПолучитьОбщуюФорму( "ХодВыполненияОбработкиДанных" ) ;
ФормаИндикатора. Открыть( ) ;
КонецЕсли ;
ФормаИндикатора. КомментарийЗначения = "Загрузка данных из Excel..." ;
ТЗ = Новый ТаблицаЗначений( ) ;
Страница = Док. Sheets( НомерСтраницы) ;
МакСтрок = Страница. UsedRange. Rows. Count;
МакСтолб = Страница. UsedRange. Columns. Count;
Для Столбец = 1 по МакСтолб цикл
ИмяСтолбца = "Столбец_" + Столбец;
Если ПерСтрокаЗаголовок тогда
ИмяСтолбца = Страница. Cells( 1 , Столбец) . Value;
ИмяСтолбца = СокрЛП( ИмяСтолбца) ;
ИмяСтолбца = СтрЗаменить( ИмяСтолбца, " " , "_" ) ;
КонецЕсли ;
ТЗ. Колонки. Добавить( ИмяСтолбца, Новый ОписаниеТипов( "Строка" ) ) ;
КонецЦикла ;
НачальнаяСтрока = 1 ;
Если ПерСтрокаЗаголовок тогда
НачальнаяСтрока = 2 ;
КонецЕсли ;
Для НомСтрока = НачальнаяСтрока по МакСтрок цикл
СтрТЗ = ТЗ. Добавить( ) ;
Для НомСтолбец = 1 по МакСтолб цикл
Данные = Страница. Cells( НомСтрока, НомСтолбец) . Value;
СтрТЗ[НомСтолбец- 1 ] = Данные;
КонецЦикла ;
ФормаИндикатора. ЭлементыФормы. Индикатор. Значение = НомСтрока/ МакСтрок * 100 ;
КонецЦикла ;
Если ЗакрытьФормуИндиктаора тогда
ФормаИндикатора. Закрыть( ) ;
КонецЕсли ;
Возврат ТЗ;
КонецФункции
Пример вызова:
Код 1C v 8.х ФормаИндикатора = ПолучитьОбщуюФорму( "ХодВыполненияОбработкиДанных" ) ;
ФормаИндикатора. НаименованиеОбработкиДанных = "Загрузка данных..." ;
ФормаИндикатора. Открыть( ) ;
ТЗ = ИзExcelВТаблицу( ФайлExcel, 1 , Истина , ФормаИндикатора) ;
Если ТЗ = Неопределено тогда
ФормаИндикатора. Закрыть( ) ;
Возврат ;
КонецЕсли ;
ФормаИндикатора. Закрыть( ) ;
или
Код 1C v 8.х ТЗ = ИзExcelВТаблицу( ФайлExcel) ;
Если ТЗ = Неопределено тогда
Возврат ;
КонецЕсли ;
Теперь функция которой я использую когда надо создать элемент справочника из полученных данных.
Код 1C v 8.х
Функция ЭлементСправочника(ИмяСправочника = "" ,ИмяЭлемента, ИмяРодителя = Неопределено, Параметры = Неопределено, СоздатьЕслиНетЭлемента=Истина)
Если ИмяСправочника = "" тогда
Сообщить( "Укажите имя спрачоника - ЭлементСправочника()" ) ;
Возврат Неопределено ;
КонецЕсли ;
Если ПустаяСтрока( ИмяЭлемента) тогда
Возврат Неопределено ;
КонецЕсли ;
Родитель = Неопределено ;
Если ИмяРодителя < > Неопределено тогда
ОбрабатИмяРодителя = ИмяРодителя;
РодительГруппы = Справочники[ИмяСправочника]. ПустаяСсылка( ) ;
Пока НЕ ПустаяСтрока( ОбрабатИмяРодителя) цикл
ПозРазделителя = Найти( ОбрабатИмяРодителя, "\\" ) ;
Если ПозРазделителя = 0 тогда
ИмяГруппы = ОбрабатИмяРодителя;
ОбрабатИмяРодителя = ""
Иначе
ИмяГруппы = Сред( ОбрабатИмяРодителя, 1 , ПозРазделителя- 1 ) ;
ОбрабатИмяРодителя = Сред( ОбрабатИмяРодителя, ПозРазделителя+ 2 ) ;
КонецЕсли ;
ТексЗапроса = "ВЫБРАТЬ
| Данные.Ссылка
|ИЗ
| Справочник." + ИмяСправочника+ " КАК Данные
|ГДЕ
| Данные.Родитель = &Родитель
| И Данные.Наименование = &Наименование
| И Данные.ЭтоГруппа" ;
ЗапросРодителя = Новый Запрос( ТексЗапроса) ;
ЗапросРодителя. УстановитьПараметр( "Родитель" , РодительГруппы) ;
ЗапросРодителя. УстановитьПараметр( "Наименование" , ИмяГруппы) ;
РезультатРодителя = ЗапросРодителя. Выполнить( ) . Выгрузить( ) ;
Если РезультатРодителя. Количество( ) < > 0 тогда
РодительГруппы = РезультатРодителя[0 ]. Ссылка
Иначе
ОбъектРодитель = Справочники[ИмяСправочника]. СоздатьГруппу( ) ;
ОбъектРодитель. Родитель = РодительГруппы;
ОбъектРодитель. Наименование = ИмяГруппы;
ОбъектРодитель. Записать( ) ;
РодительГруппы = ОбъектРодитель. Ссылка;
КонецЕсли ;
КонецЦикла ;
Родитель = РодительГруппы;
КонецЕсли ;
Элемент = Справочники[ИмяСправочника]. НайтиПоНаименованию( ИмяЭлемента) ;
ОбъектЭлемент = Неопределено ;
Если Элемент. Пустая( ) тогда
Если СоздатьЕслиНетЭлемента тогда
ОбъектЭлемент = Справочники[ИмяСправочника]. СоздатьЭлемент( ) ;
ОбъектЭлемент. Наименование = ИмяЭлемента;
Иначе
Элемент = Неопределено
КонецЕсли ;
Иначе
ОбъектЭлемент = Элемент. ПолучитьОбъект( ) ;
КонецЕсли ;
Если ОбъектЭлемент < > Неопределено тогда
Если Параметры < > Неопределено тогда
Для каждого СтрПараметр из Параметры цикл
ОбъектЭлемент[СтрПараметр. Ключ] = СтрПараметр. Значение;
КонецЦикла ;
КонецЕсли ;
Если Родитель < > Неопределено тогда
ОбъектЭлемент. Родитель = Родитель;
КонецЕсли ;
ОбъектЭлемент. Записать( ) ;
Элемент = ОбъектЭлемент. Ссылка;
КонецЕсли ;
Возврат Элемент;
КонецФункции
Автор:
borismor Категория:
Работа с Microsoft Office и OpenOffice Как выгрузить Таблицу значение в файл Excel? Код 1C v 8.х Процедура СохранитьТаблицуВФайлExcel(Таблица, ПолноеИмяФайла="" , ОткрыватьДиалогВыбораФайла=Истина, ВыгружаемыеКолонки="" ) Экспорт
Если ПустаяСтрока( ПолноеИмяФайла) ИЛИ ОткрыватьДиалогВыбораФайла Тогда
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранение документа Excel" ;
Диалог. Фильтр = "Документ Excel (*.xls)|*.xls" ;
Диалог. Расширение = "xls" ;
Диалог. ПолноеИмяФайла = ПолноеИмяФайла;
Диалог. Каталог = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной( "глТекущийПользователь" ) , "ОсновнойКаталогФайлов" ) ;
Если ( Диалог. Выбрать( ) ) И ( НЕ ПустаяСтрока( Диалог. ПолноеИмяФайла) ) Тогда
ПолноеИмяФайла = Диалог. ПолноеИмяФайла;
Иначе
Возврат ;
КонецЕсли ;
КонецЕсли ;
ФайлНаДиске = Новый Файл( ПолноеИмяФайла) ;
Попытка
Состояние( "Выгрузка данных из 1С в Microsoft Excel..." ) ;
ExcelПриложение = Новый COMОбъект( "Excel.Application" ) ;
Книга = ExcelПриложение. WorkBooks. Add( ) ;
Лист = Книга. WorkSheets( 1 ) ;
Исключение
Сообщить( "Ошибка при загрузке Microsoft Excel."
+ Символы. ПС + ОписаниеОшибки( ) , СтатусСообщения. Внимание) ;
Возврат ;
КонецПопытки ;
Если ПустаяСтрока( ВыгружаемыеКолонки) Тогда
ТаблицаВыгрузки = Таблица. Скопировать( ) ;
Иначе
ТаблицаВыгрузки = Таблица. Скопировать( , ВыгружаемыеКолонки) ;
КонецЕсли ;
Для Кол = 0 По ТаблицаВыгрузки. Колонки. Количество( ) - 1 Цикл
Лист. Cells( 1 , Кол + 1 ) . Value = ТаблицаВыгрузки. Колонки[Кол]. Заголовок;
КонецЦикла ;
Попытка
Для Стр = 0 По ТаблицаВыгрузки. Количество( ) - 1 Цикл
Для Кол = 0 По ТаблицаВыгрузки. Колонки. Количество( ) - 1 Цикл
Если ТипЗнч( ТаблицаВыгрузки[Стр][Кол]) = Тип( "Число" ) Тогда
Лист. Cells( Стр + 2 , Кол + 1 ) . Value = ТаблицаВыгрузки[Стр][Кол];
Иначе
Лист. Cells( Стр + 2 , Кол + 1 ) . Value = Строка( ТаблицаВыгрузки[Стр][Кол]) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
ExcelПриложение. DisplayAlerts = False;
Книга. SaveAs( ПолноеИмяФайла) ;
ExcelПриложение. ActiveWorkbook. Close( ) ;
ExcelПриложение. Quit( ) ;
Сообщить( "Файл выгружен успешно: " + ПолноеИмяФайла) ;
Исключение
Сообщить( "Ошибка записи данных файла :" + ПолноеИмяФайла) ;
Сообщить( ОписаниеОшибки( ) ) ;
Попытка
ExcelПриложение. Quit( ) ;
Исключение
КонецПопытки ;
КонецПопытки ;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice