Версия для печати темы (https://pro1c.org.ua/index.php?s=727209d76ac3ddbe4656ea69f2ce61a4&showtopic=67186)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Открыть файл для загрузки Excel

Автор: burza 27.02.23, 19:19

Подскажите как открыть файл для загрузки из экселя типо подобно или по началу строки? ибо конец строки меняеться постояно.

WB = Excel.Workbooks.Open("D:\1C\Mail\VA-03671_27022023_0811.xlsx");

а хотелось бы чтобы по началу VA-03671_ этого достаточно

Автор: denis84 27.02.23, 19:50

burza @ Сегодня, 19:19 * ,
Создать временный файл копированием, прочитать ,сделать все что надо. Потом удалить временный файл, по аналогии как импорт банковских выписок делают, там файлы тоже имеют разные названия

Автор: Moloko 27.02.23, 20:18

Я маю каталог, відкриваю і читаю xls-файли в цьому каталохі незалежно від їх назви, після читання прибираю файли в інший, архівний каталог

Автор: denis84 28.02.23, 8:42

burza @ Вчера, 19:19 * ,

Процедура ВыборФайла()
      КаталогЗагрузки = "";
      ФайлЗагрузки = "";
      Если ФС.ВыбратьФайл(1, ФайлЗагрузки, КаталогЗагрузки, "Выберите файл", "*.xls|*.xls", , ) = 1 Тогда
             ФайлЗагрузки = КаталогЗагрузки + ФайлЗагрузки;
       КонецЕсли;
КонецПроцедуры

Процедура ПриВыбореИмениФайла()
      Поз=Найти(ФайлЗагрузки,".");
      Если (Поз=0) Или (Поз>8) Тогда
            ФайлЗагрузки=СокрП(Лев(СокрЛ(ФайлЗагрузки),10))+". XLS";
      Иначе
            ФайлЗагрузки=СокрЛП(Лев(ФайлЗагрузки,Поз)+"XLS");
       КонецЕсли;
КонецПроцедуры

Автор: sava1 28.02.23, 9:07

burza @ Вчера, 19:19 * ,
НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)

Автор: AnryMc 28.02.23, 9:14

Не проще загружать по имени КАТАЛОГА? (перебор файлов в каталоге)...


&НаКлиенте
Процедура ВыбратьФайлExcel(Команда)
    
    Если ОбработатьВсеФайлыИзПапки Тогда
        
        Если НЕ ПроверитьСуществованиеКаталога(Объект.ПутьКФайлу) Тогда
            
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не вибрано каталог для імпорту!";
            Сообщение.Поле = "Объект.ПутьКФайлу";
            Сообщение.Сообщить();
            
            Возврат;
            
        КонецЕсли;
        
    Иначе
        
        Если НЕ ПроверитьСуществованиеФайла(Объект.ПутьКФайлу) Тогда
            
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не вибрано файл для імпорту!";
            Сообщение.Поле = "Объект.ПутьКФайлу";
            Сообщение.Сообщить();
            
            Возврат;
            
        КонецЕсли;
        
    КонецЕсли;
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Початок вибірки з файлу: "+СокрЛП(ТекущаяДата());
    Сообщение.Сообщить();
    
    Если ОбработатьВсеФайлыИзПапки Тогда
        //много файлов
        
        СписокФайлов = НайтиПутиФайлов(Объект.ПутьКФайлу);
        
        Если СписокФайлов.Количество() = 0 Тогда
            
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Немає файлів для імпорту в каталозі: "+СокрЛП(Объект.ПутьКФайлу);
            Сообщение.Сообщить();
            
            Возврат;    
            
        КонецЕсли;
        
        Для КАЖДОГО текФ ИЗ СписокФайлов Цикл
            
            Попытка
                
                Двоичное = Новый ДвоичныеДанные(текФ);
                
            Исключение
                
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Помилка відкриття файлу: "+СокрЛП(текФ)+ОписаниеОшибки();
                Сообщение.Сообщить();
                
            КонецПопытки;
            
            Адрес = НЕОПРЕДЕЛЕНО;
            
            Адрес = ПоместитьВоВременноеХранилище(Двоичное, ЭтаФорма.УникальныйИдентификатор);
            
            ЗагрузкаНаСервере(Адрес, текФ);
            
        КонецЦикла;
        
    Иначе
        //Один файл
        
        Попытка
            
            Двоичное = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
            
        Исключение
            
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Помилка відкриття файлу! "+ОписаниеОшибки();
            Сообщение.Сообщить();
            
        КонецПопытки;
        
        Адрес = ПоместитьВоВременноеХранилище(Двоичное, ЭтаФорма.УникальныйИдентификатор);
        
        ЗагрузкаНаСервере(Адрес);
        
    КонецЕсли;
    
    //Пост обработка
    
    нТип = НужныйТип();
    
    текН = 1;
    
    Для КАЖДОГО текТип ИЗ нТип Цикл
        
        текНужныйТип = текТип;
        
        ОповеститьОбИзменении(текНужныйТип);
        
    КонецЦикла;
    
КонецПроцедуры

&НаСервере
Процедура ЗагрузкаНаСервере(Адрес, текФайл = "")
        
    темп_Путь = КаталогВременныхФайлов()+ "Import_KP_"+СтрЗаменить(СтрЗаменить(СтрЗаменить(Формат(ТекущаяДата(), "ЧГ=0"), ".", ""), ":", ""), "", "_")+".xlsx";
    
    темп_файл = ПолучитьИзВременногоХранилища(Адрес);
    темп_файл.Записать(темп_Путь);
    
    СписокКолонок = Новый СписокЗначений;
    СписокКолонок.Добавить("ВидЗапроса"); //1
    СписокКолонок.Добавить("РегНомер");     //2
    СписокКолонок.Добавить("ДатаДок");      //3
        
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Початок створення файлу переносу: "+СокрЛП(ТекущаяДата());
    Сообщение.Сообщить();
    
    ТабЗагрузки = НЕОПРЕДЕЛЕНО;
    
    ТабЗагрузки = ЗагрузитьЭксель(темп_Путь,СписокКолонок);
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Файл перенесення сформовано: "+СокрЛП(ТекущаяДата());
    Сообщение.Сообщить();
...

&НаСервере
Функция  ЗагрузитьЭксель(Путь, СписокКолонки)
    
    ТЗФайл = Новый ТаблицаЗначений;
    
    Попытка
        
        ex = ПолучитьCOMобъект("","Excel.Application");
        
    Исключение
        
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст ="Excel Application не створено!!";
        Сообщение.Сообщить();
        
        Возврат ТЗФайл;
        
    КонецПопытки;
    
    Попытка
        
        ex.workbooks.open(Путь,1);
        
    Исключение
        
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст ="Файл переміщено або видалено!";
        Сообщение.Сообщить();
        
        Возврат ТЗФайл;
        
    КонецПопытки;
    
    Для каждого Зн Из СписокКолонки Цикл
        
        ТЗФайл.Колонки.Добавить(Зн.Значение);
        
    КонецЦикла;    
    
    RCount = ex.Cells(1,1).SpecialCells(11).Row;
    CCount = ex.Cells(1,1).SpecialCells(11).Column;
    
        Для j = 6 по RCount цикл
        
        Новая = ТЗФайл.Добавить();
        
        Для i=1 По СписокКолонки.Количество() Цикл
            
            ТД = СокрЛП(ex.ActiveSheet.Cells(j,i).Value);
            ТД = СтрЗаменить(ТД,Символ(КодСимвола(Символы.ВК,1))," ");
    
            
            Новая.Установить(i-1, ТД);
            
        КонецЦикла;    
        
    КонецЦикла;    
    
    ex.workbooks.Close();
    ex.quit();
    
    Возврат ТЗФайл;
    
КонецФункции

Автор: AnryMc 28.02.23, 13:33

Если мне не изменяет память, то вроде должно работать

"VA-03671_*.xls|VA-03671_*.xls"

вроде так делал...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua