Подскажите как открыть файл для загрузки из экселя типо подобно или по началу строки? ибо конец строки меняеться постояно.
WB = Excel.Workbooks.Open("D:\1C\Mail\VA-03671_27022023_0811.xlsx");
burza @ Сегодня, 19:19
,
Создать временный файл копированием, прочитать ,сделать все что надо. Потом удалить временный файл, по аналогии как импорт банковских выписок делают, там файлы тоже имеют разные названия
Я маю каталог, відкриваю і читаю xls-файли в цьому каталохі незалежно від їх назви, після читання прибираю файли в інший, архівний каталог
Процедура ВыборФайла()
КаталогЗагрузки = "";
ФайлЗагрузки = "";
Если ФС.ВыбратьФайл(1, ФайлЗагрузки, КаталогЗагрузки, "Выберите файл", "*.xls|*.xls", , ) = 1 Тогда
ФайлЗагрузки = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;
КонецПроцедуры
Процедура ПриВыбореИмениФайла()
Поз=Найти(ФайлЗагрузки,".");
Если (Поз=0) Или (Поз>8) Тогда
ФайлЗагрузки=СокрП(Лев(СокрЛ(ФайлЗагрузки),10))+". XLS";
Иначе
ФайлЗагрузки=СокрЛП(Лев(ФайлЗагрузки,Поз)+"XLS");
КонецЕсли;
КонецПроцедуры
burza @ Вчера, 19:19
,
НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)
Не проще загружать по имени КАТАЛОГА? (перебор файлов в каталоге)...
&НаКлиенте
Процедура ВыбратьФайл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();
Возврат ТЗФайл;
КонецФункции
Если мне не изменяет память, то вроде должно работать
"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