Функция ПрочитатьФайлЭксель(ПутьКФайлу) Экспорт //Создание объекта для установки связи с источником данных Connection = Новый COMОбъект("ADODB.Connection"); //сформируем строку подключения //Если необходимо в дальнейшем оперировать цифровыми значениями колонок,то ставим признак HDR = NO //если необходимо производить загрузку с учетом псевдонимов в 1й строке,то ставим HDR = YES СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = "+ПутьКФайлу; СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 8.0"+";HDR=NO;IMEX=1"";"; //подключение к источнику данных Попытка Connection.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; //создание объекта выполнения команды Command = Новый COMОбъект("ADODB.Command"); //создание объекта подключения к файлу axCatalog = Новый COMОбъект("ADOX.Catalog"); axCatalog.ActiveConnection = Connection; //получим листы документа, //для обработки колонок листа можно обратится к коллекции Лист.Columns,которую тоже можно обойти посредством цикла Для каждого СписокЛистов = Новый СписокЗначений; КоличествоКолонок = 0; Для каждого Лист ИЗ axCatalog.Tables Цикл ТекстЗапросаКолонки = ""; Если Лист.Columns.Count() > 5 Тогда Для к = 1 По Лист.Columns.Count() Цикл ТекстЗапросаКолонки = ТекстЗапросаКолонки + ?(ТекстЗапросаКолонки="","F"+Формат(к,"ЧЦ=15; ЧГ=0"),",F"+Формат(к,"ЧЦ=15; ЧГ=0")); КонецЦикла; СписокЛистов.Добавить(Лист.Name,ТекстЗапросаКолонки); КоличествоКолонок = к - 1; Прервать; КонецЕсли; КонецЦикла; //Создание объекта набора записей RecordSet = Новый COMОбъект("ADODB.RecordSet"); //Указание активного соединения Command.ActiveConnection = Connection; //получим количество строк в документе Command.CommandText = "SELECT COUNT(*)FROM ["+СписокЛистов[0].Значение+"]"; //определение типа команды Command.CommandType = 1; //Выполнение и получение набора данных RecordSet = Command.Execute(); //первая запись это количество КоличествоСтрок = RecordSet.Fields(0).Value; //опредлеление текста команды Command.CommandText = "SELECT "+СписокЛистов[0].Представление+" FROM ["+СписокЛистов[0].Значение+"]"; //определение типа команды Command.CommandType = 1; //Выполнение и получение набора данных Попытка RecordSet = Command.Execute(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("Дата")); МассивТипов.Добавить(Тип("Строка")); МассивТипов.Добавить(Тип("Число")); МассивТипов.Добавить(Тип("СправочникСсылка.Номенклатура")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,Новый КвалификаторыЧисла(15,2),Новый КвалификаторыСтроки(100),Новый КвалификаторыДаты(ЧастиДаты.Дата)); ТаблицаЗагрузки = Новый ТаблицаЗначений; Колонки = ТаблицаЗагрузки.Колонки; Для к = 1 По КоличествоКолонок Цикл Колонки.Добавить("F" + Формат(к,"ЧЦ=15; ЧГ=0"),ОписаниеТипов); КонецЦикла; RecordSet.MoveNext();//т.к первая строка это заголовки таблиц,не будем ее учитывать Пока RecordSet.EOF() = 0 Цикл НоваяСтрока = ТаблицаЗагрузки.Добавить(); к = 0; Для каждого Колонка ИЗ ТаблицаЗагрузки.Колонки Цикл НоваяСтрока[Колонка.Имя] = СокрЛП(Строка(RecordSet.Fields(к).Value)); к = к+1; КонецЦикла; RecordSet.MoveNext(); КонецЦикла; //Колонки.Добавить("Нпп" ,Новый ОписаниеТипов("Дата,Строка,Число",Новый КвалификаторыЧисла(15),Новый КвалификаторыСтроки(100),Новый КвалификаторыДаты(ЧастиДаты.Дата))); Возврат ТаблицаЗагрузки; RecordSet.Close(); Connection.Close(); КонецФункции
"Есть люди, которым труднее других. И на них обязанность быть лучше. Другим сходит с рук, а им нет… Это вроде бы каждый обязан. Но если человек решился жить по мечте, то он обязан вдвойне. Потому что большинство по мечте жить трусит… Или благоразумие мешает. А те, кто живет по мечте, — они вроде примера. Или укора". Олег Куваев.
воскресенье, 1 июля 2012 г.
Чтение из Excel в 1С8
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий