Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Загрузка из нескольких книг Exel в ТЧ документа

Загрузка из нескольких книг Exel в ТЧ документа
Я
   altaro
 
13.08.19 - 23:08
Денька доброго. Промусолено по загрузке много. Не могу догнать, как перебрать несколько книг и загрузить все в одну ТЧ. Конфа самописная. Сейчас загрузка реализована изнутри документа в модуле формы тривиальным способом.
Сначала "ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)"

ну и потом:
""
    
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Объект.ФайлExсel);
    Исключение
        Сообщить("При открытии файла произошла ошибка! Операция прервана!");
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    

    Попытка
        Excel.Sheets(1).Select();    
    Исключение
    
        Excel.ActiveWorkbook.Close();     
        Excel = 0;
        Сообщить("Первый лист не найден!");
        ОтменитьТранзакцию();
        Возврат;
    КонецПопытки;
    
    // Вычисление количества строк и колонок в зависимости от версии Excel
    vExcel = Лев(Excel.Version, Найти(Excel.Version,".")-1);
    Если vExcel = "8" тогда
        КоличествоСтрок = Excel.Cells.CurrentRegion.Rows.Count;
        КоличествоКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count,6 );
    Иначе
        КоличествоСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
        КоличествоКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
    Конецесли;

    МассивКолонок = Новый ТаблицаЗначений;
    МассивКолонок.Колонки.Добавить("НомерКолонки");
    МассивКолонок.Колонки.Добавить("НазваниеКолонки");
    Для КолонкаОтсчета = 2 по КоличествоКолонок Цикл
        ИмяКолонки = Excel.Cells(2, КолонкаОтсчета).Text;
        
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ","");
        
            НовСтрока = МассивКолонок.Добавить();    
            НовСтрока.НомерКолонки = КолонкаОтсчета;
            НовСтрока.НазваниеКолонки = ИмяБезПробелов;
        
    КонецЦикла;
    
    
    Если МассивКолонок.Количество() <> 0 и МассивКолонок.НайтиСтроки(Новый Структура("НазваниеКолонки", "Номер")).Количество() <> 0 Тогда    
        
        Для СтрокаОтсчета =3 по КоличествоСтрок Цикл          
            НСтр = Объект.Надой.Добавить();    
            
            Для каждого СтрокаМассив из МассивКолонок Цикл
                ТекущееЗначение = Excel.Cells(СтрокаОтсчета, СтрокаМассив.НомерКолонки).Text;
                
                ИмяКолонки = Excel.Cells(2, СтрокаМассив.НомерКолонки).Text;
                
                Если ИмяКолонки = "Номер" Тогда
                    НСтр.Номер = Справочники.Животные.НайтиПоКоду(ТекущееЗначение,Истина);    
                ИначеЕсли ИмяКолонки = "Станок" Тогда
                    НСтр.Станок = ТекущееЗначение;        
                ИначеЕсли ИмяКолонки = "Надой" Тогда
                    НСтр.Надой = ТекущееЗначение;
                ИначеЕсли ИмяКолонки = "Время" Тогда
                    НСтр.Время = ТекущееЗначение;
                ИначеЕсли ИмяКолонки = "Интенсивность" Тогда
                    НСтр.Интенсивность = ТекущееЗначение;    
                ИначеЕсли ИмяКолонки = "Мастит" Тогда
                    НСтр.Мастит = ТекущееЗначение;    
                КонецЕсли;    
            КонецЦикла;
        КонецЦикла;
        
    Иначе
        Сообщить("В Excel файле не достаточно данных для заполнения документа!");
    КонецЕсли;    
    
    Excel.DisplayAlerts = 0;
    Excel.Quit();
    Excel.DisplayAlerts = 1;
"
Грузим по одному файлу, каждый следующий перевыбираем и строки добавляются в ТЧ. Задача: выбрать папку с файлами (всего файлов десять абсолютно одинакового вида) и запихнуть в одну ТЧ последовательно все строки. Файлы небольшие, по 24 строки.

К сожалению, получить файлы для загрузки в виде отличном от .xls не представляется возможным.
 
 
   Консультант Баранов
 
1 - 13.08.19 - 23:20
В чем проблема? Как получить файлы из папки или как написать функцию перебора загрузки файлов?
   altaro
 
2 - 13.08.19 - 23:39
(1) Да все нужно.
Я так понимаю, получим список файлов на клиенте, аналогично выбору одного файла, использовав Диалог.МножественныйВыбор=Истина;?

Ну и все, ступор
   MetaDon
 
3 - 13.08.19 - 23:48
Мас = НайтиФайлы( (СокрЛП
(Константы.КаталогВходящихДокументов.Получить
())+"\Stado1\" ,"*.xls");
Если ЗначениеЗаполнено(Мас) Тогда
Для каждого Стр из Мас Цикл
...
   altaro
 
4 - 13.08.19 - 23:54
(3) Спс за наводку. Ща прогоню

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.