Имя: Пароль:
1C
 
Загрузка картинок с эксель листа
0 falselight
 
11.03.19
13:48
Есть эксель листы, в которых идут прайс лист с картинками.
Есть обработка которая грузит эти прайс листы на форму обработки.
Как быть с картинками, если их нужно грузить с эксель листов?
Как их загружать на форму обработки, а потом в 1с.
Можете подсказать по примеру?
1 Лодырь
 
11.03.19
13:54
Мы должны телепатически догадаться как устроена загрузка?
Хоть бы скриншот с описанием кинул.
2 mikecool
 
11.03.19
14:04
картинку - из листа в файл(а может - в двоичные данные)
полученный файл(ДД) - пихать в соответствующий ресурс
3 falselight
 
11.03.19
14:14
(1) Да не суть как устроена загрузка. Их же есть много разных.
Грузят в табличный документ на форме, в таблицу значений на форме.
Тут интересует как грузить картинки? Сейчас например не грузят. Там просто пустое поле.
Как что бы там появлялись картинки. Хочется понять. Код где либо посмотреть или пример какой.
4 sqr4
 
11.03.19
14:23
v8: Загрузка картинок из Экселя. Как?
тут схожее обсуждение
5 sqr4
 
11.03.19
14:24
С блэкджеком и примерами кода
6 falselight
 
11.03.19
15:10
(4) Что то не сильно то обсуждаемо. Поверхностно как то!!!!!
7 sqr4
 
11.03.19
15:11
(6) Но и по ним можно понять, что чуда не будет и одной строчкой такое не делается.
8 falselight
 
11.03.19
15:19
(7) Охото понимать, как можно обработать изображение в Экселе, и загрузить его в номенклатуру.
9 Мыш
 
11.03.19
15:21
Если не самый старый эксель, то распаковать файл, распарсить контент, вытащить картинки. Получится нативный 1С )
10 Fish
 
11.03.19
15:24
(6) Там же даже решение есть.
11 falselight
 
11.03.19
16:04
(10) с использованием каких то библиотек?
12 Fish
 
11.03.19
16:08
(11) Не каких-то, а вполне определённой.
13 falselight
 
11.03.19
16:11
(12) Да и решение вот тут? http://catalog.mista.ru/public/16800/
Надоело качать не понятно что.
У меня эксель. Строки и картинки на каждой строке.
Интересует как это загрузить на форму обработки а потом в номенклатуру.
Растратил я все мани. Не на что качать это что бы посмотреть что там.
14 Fish
 
11.03.19
16:16
(13) "Растратил я все мани. Не на что качать это что бы посмотреть что там" - Там загрузка бесплатная вроде.
15 falselight
 
11.03.19
16:35
(14) Спасибо, понял, не обратил внимание. Скачал. Завтра буду смотреть.
Пытаться понять как это может помочь при загрузке эксель листа, с картинками в строках.
Как их можно переносить на форму обработки или номенклатуру.
16 АнализДанных
 
11.03.19
16:41
(0) Все намного проще, чем советуют. Делается, без дополнительных компонент:
Считываешь эксель, через метод табличного документа "ТабДок.Прочитать(ПутьКФайлуЭксель, СпособЧтенияЗначенийТабличногоДокумента.Значение)".

Дальше для каждой строки получаешь область этой строки и перебираешь все картинки, которые в ней находятся (тебя интересует только одна картинка). Т.к. в эксель картинки не привязываются к ячейкам, а лежат сверху, то может получится, что картинка находится одновременно на двух ячейках, в этом случае система выберет ту картинку, которая большей частью лежит на нужной области (или как-то так...).

Для НомерСтроки=1 По ТабДок.ВысотаТаблицы Цикл
    
    НомерСтроки_Стр = Формат(НомерСтроки,"ЧН=0; ЧГ=0");
        
    АдресОбластиРисунка = "R"+НомерСтроки_Стр+"C1:R"+НомерСтроки_Стр+"C"+3; // Картинку ищем в первых 3-х колонках
        
    Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
        
        НужныеДанныеКартинки = РисунокТД.Картинка;
        Прервать;
                                        
    КонецЦикла;

КонецЦикла
17 falselight
 
11.03.19
17:43
(16)  Спасибо буду пробовать.
18 falselight
 
11.03.19
18:02
(16) А куда это считывается?

ТабДок.Прочитать(ПутьКФайлуЭксель, СпособЧтенияЗначенийТабличногоДокумента.Значение)
19 АнализДанных
 
11.03.19
18:12
(18) В Табличный документ:

ТабДок = Новый Табличный документ;
ТабДок.Прочитать(ПутьКФайлуЭксель, СпособЧтенияЗначенийТабличногоДокумента.Значение);
20 Мимохожий Однако
 
11.03.19
18:31
(0) Спроси у Маньяка
21 falselight
 
12.03.19
08:42
(19) Почему идет ошибка? Доступ к файлу не может быть получен, на Прочитать()?

    //
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ЭтотОбъект.ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);    
    //
    Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
        НомерСтроки_Стр = Формат(НомерСтроки, "ЧН=0; ЧГ=0");
        АдресОбластиРисунка = "R" + НомерСтроки_Стр + "C3:R" + НомерСтроки_Стр + "C" + 3;// Картинку ищем в первых 3-х колонках
        Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
            НужныеДанныеКартинки = РисунокТД.Картинка;
            Прервать;
        КонецЦикла;
        //
    КонецЦикла
22 falselight
 
12.03.19
08:44
(21) Хотя я понял почему. Я этот файл обрабатываю и гружу на форму обработки.
А потом вставил этот блок, то есть получается сам файл этот и обрабатывается в данный момент.
Как лучше тогда это обработку встроить в этот код?


Процедура ВыборЛиста(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    //Открываем необходимый лист
    Если Найти(СокрЛП(Строка(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы)), "xls") > 0 Тогда
        Предупреждение("Выберите конкретный лист для загрузки, а не сам файл!");
        Возврат;
    КонецЕсли;
    Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();  
    //Получим количество строк и колонок.
    //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
    Версия = Лев(Excel.Version,Найти(Excel.Version,".") -1);
    Если Версия = "8" тогда
        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Excel.Cells(1,1).SpecialCells(11).Row;
        ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;  
    Конецесли;
    ЭлементыФормы.ДанныеЛиста.Колонки.Очистить();
    ДанныеЛиста.Колонки.Очистить();
    Колонка        = ЭлементыФормы.ДанныеЛиста.Колонки.Добавить("НомерСтроки");
    Колонка.Данные = "НомерСтроки";
    ДанныеЛиста.Колонки.Добавить("НомерСтроки");
    Колонка.ТекстШапки = "№ строки";
    Для Счетчик = 1 По ФайлКолонок Цикл
        ДанныеЛиста.Колонки.Добавить("К"+Счетчик, Новый ОписаниеТипов("Строка"));
        Колонка        = ЭлементыФормы.ДанныеЛиста.Колонки.Добавить("К" + Счетчик, Новый ОписаниеТипов("Строка"));
        Колонка.Данные = "К" + Счетчик;
    КонецЦикла;
    Для Счетчик = 1 По ФайлСтрок Цикл
        НоваяСтрока = ДанныеЛиста.Добавить();
    КонецЦикла;
    Область = Excel.ActiveWorkbook.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).Range(Excel.ActiveWorkbook.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).Cells(1,1), Excel.ActiveWorkbook.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).Cells(ФайлСтрок,ФайлКолонок));
    Данные  = Область.Value.Выгрузить();
    Для Счетчик = 1 По ФайлКолонок Цикл
        ДанныеЛиста.ЗагрузитьКолонку(Данные[Счетчик - 1], Счетчик);
    КонецЦикла;
    Для к = 1 по ФайлСтрок цикл
        ДанныеЛиста[к - 1].НомерСтроки = к;
    КонецЦикла;
    //
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ЭтотОбъект.ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);    
    //
    Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
        НомерСтроки_Стр = Формат(НомерСтроки, "ЧН=0; ЧГ=0");
        АдресОбластиРисунка = "R" + НомерСтроки_Стр + "C3:R" + НомерСтроки_Стр + "C" + 3;// Картинку ищем в первых 3-х колонках
        Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
            НужныеДанныеКартинки = РисунокТД.Картинка;
            Прервать;
        КонецЦикла;
        //
    КонецЦикла    
КонецПроцедуры
23 falselight
 
12.03.19
12:07
Не подскажете? Как тут применить 16? Картинки в листе в 3й ячейке.
24 falselight
 
12.03.19
12:10
Можно ли как то скопировать временно файл для обработки?
25 ДенисЧ
 
12.03.19
12:14
(24) Я не против, копируй. Кто может тебе запретить?
26 falselight
 
12.03.19
12:33
Лучше так.

    Excel.DisplayAlerts = False;
    Excel.Quit();    
    //
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ЭтотОбъект.ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);    
    //
    Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
        НомерСтроки_Стр = Формат(НомерСтроки, "ЧН=0; ЧГ=0");
        АдресОбластиРисунка = "R" + НомерСтроки_Стр + "C3:R" + НомерСтроки_Стр + "C" + 3;// Картинку ищем в первых 3-х колонках
        Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
            НужныеДанныеКартинки = РисунокТД.Картинка;
            Прервать;
        КонецЦикла;
        //
    КонецЦикла    


Тут - НужныеДанныеКартинки  - Картинка, как её в предприятии посомтреть что это она?
27 falselight
 
12.03.19
12:48
Вывел на ТЗ на форме обработки картинку. А как мне её там отобразить??????

http://joxi.ru/Vm6Zv3Xt4DYeGm


    КонецЦикла;
    //
    Excel.DisplayAlerts = False;
    Excel.Quit();    
    //
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ЭтотОбъект.ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);    
    //
    Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
        НомерСтроки_Стр = Формат(НомерСтроки, "ЧН=0; ЧГ=0");
        АдресОбластиРисунка = "R" + НомерСтроки_Стр + "C3:R" + НомерСтроки_Стр + "C" + 3;// Картинку ищем в первых 3-х колонках
        Для Каждого РисунокТД ИЗ ТабДок.ПолучитьОбласть(АдресОбластиРисунка).Рисунки Цикл
            НужныеДанныеКартинки = РисунокТД.Картинка;
            //
            ДанныеЛиста[НомерСтроки-1][3] = НужныеДанныеКартинки;
            //
            Прервать;
        КонецЦикла;
        //
    КонецЦикла    
КонецПроцедуры
28 falselight
 
13.03.19
08:49
(19)  А я вот прочел этот документ эксель, он же получается открыт в памяти!!!! А как его закрыть?
Подскажите пожалуйста!!! Если он открыт табличным документом?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший