Имя: Пароль:
1C
1С v8
Считать файл EXCEL в таблицу значений
0 Iori
 
29.04.21
17:30
Раньше не было проблем считать файл EXEL с помощью COMОбъект("Excel.Application"). Сейчас вопрос стал следующий: Есть ли методы прочитать файл EXEL в таблицу значений, если на компе нет установленного самого EXEL?
1 ДенисЧ
 
29.04.21
17:32
ТабличныйДокумент.Прочитать()
И потом уже из табдока любыми средствами
2 Iori
 
29.04.21
17:35
Понял. Спасибо. Сейчас попробую...
3 Pro-tone
 
29.04.21
18:42
Даже XLT читает, но его надо сперва переименовать в XLS
4 Гений 1С
 
гуру
29.04.21
20:42
(0) Эх, молодость-зеленость, мой гений тебе дарит:



Функция ЗагрузитьТаблицуЗначенийИзФайла(ИмяФайла, Параметры = Неопределено) Экспорт
    //2021-01-19
    ТД = Новый ТабличныйДокумент();
    ТД.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
    ПараметрСтрокаШапки = 1;
    ОбязательныеПоля = Новый Массив();
    Если Параметры <> Неопределено Тогда
        Если Параметры.Свойство("СтрокаШапки") Тогда
            ПараметрСтрокаШапки = Параметры.СтрокаШапки;
        КонецЕсли;
        Если Параметры.Свойство("ОбязательныеПоля") Тогда
            ПараметрОбязательныеПоля = Параметры.ОбязательныеПоля;
        Иначе
            ПараметрОбязательныеПоля = Новый Массив();
        КонецЕсли;
    КонецЕсли;
    МассивКолонок = Новый Массив();
    МассивОбязательныхКолонок = Новый Массив();
    ТЗ = Новый ТаблицаЗначений();
    Для ИндКол = 1 ПО ТД.ШиринаТаблицы Цикл
        Текст = Сокрлп(ТД.Область(ПараметрСтрокаШапки, ИндКол).Текст);
        Если Текст = "" Тогда
            Продолжить;
        КонецЕсли;
        МассивКолонок.Добавить(ИндКол);
        ИмяКолонки = ОставитьДопустимыеДляКлючаСтруктурыСимволы(Текст, "_");
        ТЗ.Колонки.Добавить(ИмяКолонки);
        Для Каждого Эл ИЗ ПараметрОбязательныеПоля Цикл
            Если Эл = ИмяКолонки Тогда
                МассивОбязательныхКолонок.Добавить(ИндКол);
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    Для ИндСтр = ПараметрСтрокаШапки + 1 По ТД.ВысотаТаблицы Цикл
        
        ЕстьЗаполненные = ложь;
        
        Для Каждого ИндКол ИЗ МассивОбязательныхКолонок Цикл
            Текст = Сокрлп(ТД.Область(ИндСтр, ИндКол).Текст);
            Если Текст <> "" Тогда
                ЕстьЗаполненные = истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Если НЕ ЕстьЗаполненные Тогда //Пропускаем строку
            Продолжить;
        КонецЕсли;
        
        НСтр = ТЗ.Добавить();
        Для СчКолонки = 0 По МассивКолонок.Количество() -1 Цикл
            ИндКол = МассивКолонок[СчКолонки];
            Текст = Сокрлп(ТД.Область(ИндСтр, ИндКол).Текст);
            НСтр[СчКолонки] = Текст;
        КонецЦикла;
    КонецЦикла;
    
    Возврат ТЗ;
    
КонецФункции


Функция ОставитьДопустимыеДляКлючаСтруктурыСимволы(Ключ, ЗаменятьНедопустимыеНа = "")
    ДопустимаяСтрока = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_";
    Рез = "";
    Для Инд = 1 По СтрДлина(Ключ) Цикл
        Симв = Сред(Ключ, Инд, 1);
        Если Найти(ДопустимаяСтрока, ВРег(Симв)) = 0 Тогда
            Рез = Рез + ЗаменятьНедопустимыеНа;
        Иначе
            Рез = Рез + Симв;
        КонецЕсли;
    КонецЦикла;
    Возврат Рез;
КонецФункции



&НаКлиенте
Процедура Загрузить(Команда)
    Ф = Новый Файл(ФайлЗагрузки);
    ДД = Новый ДвоичныеДанные(ФайлЗагрузки);

&НаСервере
Функция ЗагрузитьНаСервере(ДД, Расширение, Ссылка)        
    Результат = Новый Структура(
    "ОК, Ошибки" , ложь, "");
    ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
    ДД.Записать(ИмяФайла);

    ПараметрыТЗ = Новый Структура();
    ОбязательныеПоля = Новый Массив(); ОбязательныеПоля.Добавить("Номенклатура");
    ПараметрыТЗ.Вставить("ОбязательныеПоля", ОбязательныеПоля);
    ТЗ = ЗагрузитьТаблицуЗначенийИзФайла(ИмяФайла, ПараметрыТЗ);


5 Garykom
 
гуру
29.04.21
21:06
(4) геня а где листики то?
6 Garykom
 
гуру
29.04.21
21:06
(5) + Sheets которые внутри Workbook ?
7 Chameleon1980
 
29.04.21
21:14
(4)обрывки какие-то
8 Гений 1С
 
гуру
29.04.21
21:15
(5) они будут слиты в один эксель. а че?
(7) не завидуй
9 Chameleon1980
 
29.04.21
21:20
да уж "есть чему"
10 Ненавижу 1С
 
гуру
29.04.21
22:02
(8) ОставитьДопустимыеДляКлючаСтруктурыСимволы работает некорректно работают для ключей начинающихся на цифры
11 ГдеСобака Зарыта
 
30.04.21
01:44
А по ADO уже не модно читать? Через ТабДок Лучше?
12 ДенисЧ
 
30.04.21
03:59
(11) По адо на линухе?