Попытка XLSОбъектОсновной = Новый COMОбъект("Excel.Application"); Исключение Предупреждение("Невозможно загрузить MS EXCEL !!!" + Символы.ПС + ОписаниеОшибки(), 10, "Ошибка"); Возврат; КонецПопытки; XLSОбъектКниги = XLSОбъектОсновной.WorkBooks; Попытка XLSОбъект = XLSОбъектКниги.Open(элементыформы.пвИмяФайла.Значение); Исключение Предупреждение("Невозможно открыть файл " + элементыформы.пвИмяФайла.Значение + " !!!" + Символы.ПС + ОписаниеОшибки(), 10, "Ошибка"); Возврат; КонецПопытки; XLSОбъект.Application.Caption = "Открыто из 1С"; //определим диапозоны Если НомерСтрокиСДанными = 0 Тогда // То с первой строки НомерСтрокиСДанными = 1; КонецЕсли; Если НомерСтраницы = 0 Тогда // То с первой страницы НомерСтраницы = 1; КонецЕсли; Лист = XLSОбъект.Sheets(НомерСтраницы); Если КолВоКолонок = 0 Тогда //КолВоКолонок не установлено, будем автоматически заполнять КолВоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; КонецЕсли; Если КолВоСтрок = 0 Тогда // КолВоСтрок не уставновлено, Будем автоматически заполнять количество строк. КолВоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; КонецЕсли; // ТЗДанных - Таблица значений на форме ТЗДанных.Очистить(); Лист = XLSОбъект.Sheets(НомерСтраницы); Для чС = (НомерСтрокиСДанными + 1) По КолВоСтрок Цикл Состояние("Загружаем строки:" + чС); ностр=ТЗДанных.Добавить(); попытка //грузим номенклатуру Ячейка = Лист.Cells(чС,1); ностр.НоменклатураЕксел = Ячейка.Value; исключение сообщить("Номенклатура - строка - "+чс + Символы.ПС + ОписаниеОшибки()); конецпопытки; попытка //грузим количество Ячейка = Лист.Cells(чС, 2); ностр.Количество = Ячейка.Value; исключение сообщить("Количество - строка - "+чс + Символы.ПС + ОписаниеОшибки()); конецпопытки; попытка //грузим сумму Ячейка = Лист.Cells(чС, 3); ностр.Сумма = Ячейка.Value; исключение сообщить("Сумма - строка - "+чс + Символы.ПС + ОписаниеОшибки()); конецпопытки; попытка //грузим единица измерения Ячейка = Лист.Cells(чС, 4); ностр.ЕдИзмеренияЕксел = Ячейка.Value; исключение сообщить("Ед. измерения - строка - "+чс + Символы.ПС + ОписаниеОшибки()); конецпопытки; //КонецЦикла; КонецЦикла; XLSОбъект.Application.Quit();
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 // // Параметры: // пФайл - Имя файла // пЛист - Имя листа с данными // СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки" // если не задано, созадуться колонки вида "К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(); Возврат СписокЛистов; КонецФункции
Попытка Excel = СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!"); Возврат; КонецПопытки; РабочиеКниги=Excel.WorkBooks; // создаем рабочую книгу Попытка // открываем файл Отчет=РабочиеКниги.Open(Каталог+ИмяФайла); Исключение Сообщить(ОписаниеОшибки()+"; фаил с макросом не найден!"); Возврат; КонецПопытки; // заносим в таблицу какие-либо данные Лист = Отчет.Worksheets(1); Для Ном=1 По 20 Цикл Ячейка = Лист .Cells(ном,1); Ячейка.Value; Сообщить(Ячейка ); КонецЦикла; Excel.Visible=1; Попытка Отчет.Save(); Исключение Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!"); Возврат; КонецПопытки;