Загрузка из EXCEL в 1С на платформе 8.3.6/8.3.7/8.3.8/8.3.9/8.3.10 (с картинками)
Импорт содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в таблицу значений.
Где-то про схожее уже писали, но чтоб не возиться нужно быстро найти шаблоны кода когда есть экстренная необходимость. Может, про картинки разве что. Попадаются задачи парсинга сайтов с использованием 1С.
В данной публикации приводится пример реализации функционала импорта из файлов EXCEL (xlsx, xls, ods) в таблицу значений в режиме 1С:Предприятие на платформе 8.3.6.
Приведенный функционал вполне подходит для примера, о чем и написано выше в тексте публикации..
(6) strangers,
Картинки должны находиться в пределах ячейки. В одной ячейке может быть несколько картинок.
В результирующую таблицу значений записываются ссылки на файлы картинок.
В ячейке, содержащей какртинки не должно быть ничего другого (текст, число и т.д.).
В этом случае получим реальное количество колонок, вне зависимости от заполнения 1-ой строки.
(последние колонки, не имеющие заполненной 1-ой строки также будут учтены.)
А почему никто не пишет, что при использовании директивы"&НаСервере" в клиент-серверном варианте файл должен располагаться либо по сетевому пути, либо на сервере, где установлен "Агент сервера 1С:Предприятия 8.3 (x86-64)"?
(26) TeMochkiN, да, я разобрался, с клиента на сервер можно передать прочитанные из файла двоичные данные, потом на сервере их записать во временный эксель-файл и читать табличным документом из него.
Нужно ли для корректной работы этого функционала у "старых" конфигураций изменять режим совместимости?
А то не хочет работать в 8.3.6 (2076)
{Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Прочитать)
ТабДок.Прочитать("D:\1.xls");
по причине:
Ошибка при выполнении файловой операции.
С любым параметром "СпособЧтенияЗначенийТабличногоДокумента" то же самое.
(17) urbanist, для использования данной возможности необходима платформа 8.3.6 с отключенным режимом совместимости.
Сейчас подобные вещи можно тестировать и смотреть на тестовых ЗУП 3.0.23 и БП 3.0.41, которые переводят на 8.3.6 со снятием режима совместимости (БСП версия 2.3).
(17) urbanist, (18) Samarin,
Режим совместимости не причем.
Не открыт ли файл в EXCEL?
Еще столкнулся с тем, что какая-то из версий LibreOffice коверкала файлы.
Поэтому рекомендую использовать MS EXCEL.
Функция ТолькоЦифрыИЗапятаяВСтроке не отлавливает отрицательные числа
Надо добавить условие:
// Проверка на отрицательное число
Если Сред(СтрокаПроверки, 1, 1) = "-" Тогда
СтрокаПроверки = Сред(СтрокаПроверки, 2, СтрДлина(СтрокаПроверки));
КонецЕсли;
(34) ram8291,
Из текста публикации:
О файле EXCEL:
В общем случае файл EXCEL содержит несколько листов с данными.
Метод табличного документа "Прочитать" читает все листы в 1 (один) табличный документ.
Поэтому в исходном файле EXCEL должен быть только один лист.
Проблема: числовые значения заполняются в Таблицу Значений правильно (как числа) из файла Эксель (через Табличный Документ), только если числа не содержат десятичной (дробной) части. Если есть дробная часть, то они записываются как текстовые значения, либо как тип Дата.
Пытался менять региональные настройки ("," или "." в качестве разделителей дробной части) и Региональные настройки базы данных 1С - безрезультатно.
(36) Гость,
Рекомендовал бы Вам обратить внимание на обработку Импорт из внешнего источника в 1С: infostart.ru В ней механизм загрузки данным методом уточнен (несколько изменен функционал по типизации значений).
(41) StepByStep,
Была у меня задача, когда было необходимо загружать заказы от покупателей, приходящие в формате XL 95, база в клиент-серверном варианте, обработка на сервере, где офис не установлен, и никакого автоконвертера я не нашел, пришлось использовать другой способ обработки файла без установки мс Офис на сервер
Очень интересная и полезная обработка. На 8.2. очень часто была нужна и нужна на 8.3. переход на 8.3 - вынужденный. Объясните, почвему ядолжна выкладывать 1200 рублей, если переход на 8.3. был вынужден? Меня все устраивало..
(43) Вы о чем? это не обработка, это бесплатная статья, в которой рассказывается как можно загрузить из Экселя в 1С, приводится метод который автор предлагает воспользоваться.
Про переход с 8.2 на 8.3 тут ничего не говорится, денег автор тоже не требует за свою статью.
(45)
Практическое применение:
"Импорт из EXCEL и других источников (xls, xlsx, xlsb, ods, sxc, dbf, mxl, csv, clipboard, sql) в 1С"
http://infostart.ru/public/120961/
с конструкцией для определения количества колонок "ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали()" будьте осторожны. она определяет количество колонок по первой строке. у меня в первой строке 6 колонок с данными, а с 7 строки уже 8 колонок. конструкция возвращает мне 6. если в первой строке добавить данные в 7 и 8 колонки, то вернет 8 как и должно быть. релиз "8.3.10.2252"
49.
aleksey.kubovtsov
7319.09.17 22:18 Сейчас в теме
Спасибо за публикацию .
У меня была проблема, может кому поможет в решение:
Строку вида "01.02.2017" при чтение excel табличным документом воспринималась как 01.ММ.2017
помогло
ТабДокумент.Прочитать(ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Значение);
Вставил весь код в модуль внеш обработки. Работаю на 8.3.10.2580.
Выдает ошибку:{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(8,36)}: Процедура или функция с указанным именем не определена (ВерсияБезНомераСборки)
ВерсияПриложенияБезНомераСборки = <<?>>ВерсияБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); (Проверка: Сервер).
(0) Статья отличная. Плюс, несомненно. Но вот от объекта MSScriptControl.ScriptControl я бы всё же отказался, потому как существует только 32-х битная реализация этой библиотеки и она просто не загрузится в 64-х битный серверный процесс. Выход, конечно, есть, но он уж очень похож на танец с бубнами.
Есть такой нюанс с использованием ТабличногоДокумента в тонком клиенте: если файл уже открыт в Excel, то не получается передать его на сервер для обработки с помощью метода ПоместитьФайлы - файл оказывается заблокированным другим приложением
(0) Функционал чтения многостраничного документа можно значительно упростить. Вместо того, чтобы дважды читать документ для определения количества листов и их имен:
(0)Не могу понять, загружается ли гиперссылка из ячейки Excel-а?
Гиперссылка представляет из себя URL на картинку на сайте (прилагаю для примера кусочек такого файла).
В блоке:
Если ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
ЗначениеЯчейки = ПреобразоватьПростоеЗначениеИзСтрокиВТипизованноеЗначение1С(ЗначениеЯчейки);
Если ТипЗнч(ЗначениеЯчейки) = Тип("Строка") Тогда
ЗначениеЯчейки = СокрЛП(ЗначениеЯчейки);
КонецЕсли;
Иначе
ЗначениеЯчейки = Неопределено;
Если Область.Рисунки.Количество() > 0 Тогда // Изображение.
ЗначениеЯчейки = ПолучитьЗначениеЯчейкиОбластиТабличногоДокументаСКартинками(Область, нСтрока, нКолонка, "УИД");
КонецЕсли;
КонецЕсли;
Показать
переменная "ЗначениеЯчейки" содержит просто текст "Изображение"...
Кому-нибудь удалось получить URL гиперссылки из подобного файла?
По мне так механизм чтения Excel средствами платформы еще очень сырой.
Вот вам живой пример
Есть файл, формата Excel-97 (xls) с формой УПД, которую нам по почте присылает поставщик.
Ячейка "Всего к оплате" имеет числовое значение 27 191,66
Метод прочитать, табличного документа, с типом чтения "Значение" получает 27 192! Зачем это платформа 1С сделала округление?
При выборе типа чтения "Текст" выдает еще более интересный вариант - "General27192"! Это вообще откуда?
Все на скринах.
Веселый файл тоже во вложении.
З.Ы. Редактировать и пересохранять файл не предлагать! Он грузится автоматом при получении почты.
Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0")