Еще один, "велосипедный", способ загрузки данных из Excel


Как загрузить данные из Excel в 1С 8.2 наиболее простым способом?
Правильно!!! Попросить кого-то сделать всю грязную работу!
И в моем случае это 1С 8.3 — да, да … Вот такой вот велосипед (на костылях).

Была поставлена задача — автоматизировать загрузку данных из Excel. Использование платформы 1С 8.2 было одним из условий. Перепробовал разные способы, из на Инфостарте много, от классического Excel.Application до внешних компонент. Но каждый способ показывал в процессе эксплуатации какие-то минусы. Вот и родилась идея воспользоваться возможностями платформы 8.3, чтобы преобразовать исходный файл *.xls(*.xlsx) в *.mxl, а потом обрабатывать его как «родной». В обработке к публикации пример преобразования от исходного файла, до открытия в 1С табличного документа. Последовательность действий работы следующая:

  1. По COM подключаемся из 8.2 к 8.3;
  2. Из 8.3 открываем файл Excel-ем;
  3. Каждый лист Excel сохраняем в отдельный временный файл;
  4. Читаем этот временный файл в ТабличныйДокумент 1С 8.3 и сохраняем в файл формата mxl;
  5. Читаем файл mxl в ТабличныйДокумент 1С 8.2 и показываем пользователю (или дальнейшая обработка);

Получилось очень даже прилично. И скорость нормальная, и «минусов», которые раньше мешали, пока нет. Не Бог весть что, но, может, кому пригодится.

Я сделал файл-пример, в котором 3 листа, на которых заполнено разное кол-во колонок, и они разной ширины. На картинках показано, как файл с примером будет выглядеть, если его просто открыть в 1С 8.3 и как тот же файл будет открыт обработкой, НО … на 8.2 🙂

8 Comments

  1. Krasnyj

    Плюс за идею, но вот как будет с практической применимостью? 🙂

    Reply
  2. androgin

    не проще ли обновить платформу?

    Reply
  3. ifal

    А вот так пробовали? Проще некуда.

    Excel = Новый COMОбъект(«Excel.Application»);
    Excel.WorkBooks.Open(ПолноеИмя);
    ExcelЛист = Excel.Sheets(НомерЛиста);
    ТаблицаМассивов = ExcelЛист.UsedRange.Value.Выгрузить();
    Excel.WorkBooks.Close();
    

    ТаблицаМассивов — тут весь ваш лист. Так, на мой взгляд, проще и быстрей. Для вашей задачи осталось добавить перебор листов и готово.

    Reply
  4. wunderland

    (2) 🙁 Пока нет возможности

    Reply
  5. wunderland

    (3) Обязательно попробую. Спасибо.

    Reply
  6. wunderland

    (1) Пока отлично работает. Тьфу-тьфу.

    Reply
  7. Fragster

    Я поступал проще и заставлял пользователя делать контрол це — контрол вэ в таб. документ на форме, когда совсем лень было. + шапку нужную для распознавания можно без сохранения файла сделать

    Reply
  8. wunderland

    (3) Прикольная штука, но вот «косяк» который она не ловит http://prntscr.com/c1vg9m

    Значение в поле «Штрихкод» начинается с «00» и сделали это через формат ячейки.

    И данным методом эти нули я не получаю ( здесь можно долго рассуждать — но мы не будем), а мне они нужны.

    Но за метод все равно большое спасибо.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *