Загрузка данных из Excel. Картинка встроенная в ячейку
Возникла необходимость загрузить с Excel некий каталог договоров в УТ 10. Вроде ничего необычного, но есть одна колонка, где в каждую ячейку вставлен объект PDF. И этот объект нужно загрузить в базу. Трудность в том, что не получается к нему добраться. Подскажите в какую сторону копать?
Прикрепленные файлы:
По теме из базы знаний
- 1С8:борьба - личный опыт работы с платформой 1с8
- Загрузка из EXCEL в 1С. Чтение файла XLSX средствами 1С. ПостроительDOM
- Загрузка из EXCEL в 1С на платформе 8.3.6/8.3.7/8.3.8/8.3.9/8.3.10 (с картинками)
- Загрузка в 1С:Бухгалтерию 3.0, 1С:КА 2.4, 2.5, УНФ 1.6/3.0 данных из ОФД о денежных поступлениях (чеках)
- Таблица для финансиста. Решение на стыке технологий
Найденные решения
EXCELApplication = Новый COMОбъект("EXCEL.Application");
EXCELApplication.Visible = Ложь;
EXCELApplication.DisplayAlerts = Ложь;
...
Book = EXCELApplication.WorkBooks.Open(ПутьКФайлу);
ЛистЭксель = Book.WorkSheets(1);
../
ЗначениеЯчейки = ПрочитатьКартинку_MSEXCEL(EXCELApplication, ЛистЭксель, 2, Ц, ИмяФайлаEXCEL, 1, "УИД");
ВыбранноеИзображение = Новый Картинка(ЗначениеЯчейки , Ложь);
Функция ПрочитатьКартинку_MSEXCEL(Знач EXCELApplication, Знач Sheet, Знач НомерКолонки, Знач НомерСтроки, Знач ИмяФайлаEXCEL, Знач НомерЛиста, Знач ПравилоИмяФайлаКартинки = "УИД")
Перем GraphicObject, Chart;
Перем ПолноеИмяФК, ФайлКартинки;
Если Sheet.Shapes.Count() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Для Каждого GraphicObject ИЗ Sheet.Shapes Цикл
Если GraphicObject.Type = 13 И GraphicObject.TopLeftCell.Column = НомерКолонки И GraphicObject.TopLeftCell.Row = НомерСтроки Тогда
// GraphicObject.Name.
Если ПравилоИмяФайлаКартинки = "УИД" Тогда
ПолноеИмяФК = КаталогВременныхФайлов() + Новый УникальныйИдентификатор() + ".jpg";
Иначе
ПолноеИмяФК = КаталогВременныхФайлов() + ИмяФайлаEXCEL + "Л" + НомерЛиста + "С" + НомерСтроки + "К" + НомерКолонки + ".jpg";
КонецЕсли;
Попытка
GraphicObject.ScaleHeight(1,1); // Истинный размер по высоте.
GraphicObject.ScaleWidth(1,1); // Истинный размер по ширине.
GraphicObject.Copy();
Chart = EXCELApplication.ActiveSheet.ChartObjects().Add(0, 0, GraphicObject.Width, GraphicObject.Height).Chart();
Chart.Paste();
Chart.Export(ПолноеИмяФК);
Chart = Неопределено;
ФайлКартинки = Новый Файл(ПолноеИмяФК);
Если ФайлКартинки.Существует() Тогда
Возврат ПолноеИмяФК;
Иначе
Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
EXCELApplication = Новый COMОбъект("EXCEL.Application");
EXCELApplication.Visible = Ложь;
EXCELApplication.DisplayAlerts = Ложь;
...
Book = EXCELApplication.WorkBooks.Open(ПутьКФайлу);
ЛистЭксель = Book.WorkSheets(1);
../
ЗначениеЯчейки = ПрочитатьКартинку_MSEXCEL(EXCELApplication, ЛистЭксель, 2, Ц, ИмяФайлаEXCEL, 1, "УИД");
ВыбранноеИзображение = Новый Картинка(ЗначениеЯчейки , Ложь);
Функция ПрочитатьКартинку_MSEXCEL(Знач EXCELApplication, Знач Sheet, Знач НомерКолонки, Знач НомерСтроки, Знач ИмяФайлаEXCEL, Знач НомерЛиста, Знач ПравилоИмяФайлаКартинки = "УИД")
Перем GraphicObject, Chart;
Перем ПолноеИмяФК, ФайлКартинки;
Если Sheet.Shapes.Count() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Для Каждого GraphicObject ИЗ Sheet.Shapes Цикл
Если GraphicObject.Type = 13 И GraphicObject.TopLeftCell.Column = НомерКолонки И GraphicObject.TopLeftCell.Row = НомерСтроки Тогда
// GraphicObject.Name.
Если ПравилоИмяФайлаКартинки = "УИД" Тогда
ПолноеИмяФК = КаталогВременныхФайлов() + Новый УникальныйИдентификатор() + ".jpg";
Иначе
ПолноеИмяФК = КаталогВременныхФайлов() + ИмяФайлаEXCEL + "Л" + НомерЛиста + "С" + НомерСтроки + "К" + НомерКолонки + ".jpg";
КонецЕсли;
Попытка
GraphicObject.ScaleHeight(1,1); // Истинный размер по высоте.
GraphicObject.ScaleWidth(1,1); // Истинный размер по ширине.
GraphicObject.Copy();
Chart = EXCELApplication.ActiveSheet.ChartObjects().Add(0, 0, GraphicObject.Width, GraphicObject.Height).Chart();
Chart.Paste();
Chart.Export(ПолноеИмяФК);
Chart = Неопределено;
ФайлКартинки = Новый Файл(ПолноеИмяФК);
Если ФайлКартинки.Существует() Тогда
Возврат ПолноеИмяФК;
Иначе
Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
Возврат Неопределено;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
Возврат Неопределено;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Показать
(4) То есть в ячейке, если смотреть в отладке в 1с пусто? Тогда добавьте в экселе еще одну колонку и в ее формуле пропишите, что она должна из колонки с файлом брать только путь (функцией "ЗАМЕНИТЬ" уберите лишнее из ячейки, оставив только путь к файлу). И далее работайте уже с ним в 1с
Прикрепленные файлы:
Если да, то из него можно получать сам файл:
Останется только присвоить его в реквизит каталога
ИмяФайла = "C:\Test\readme.txt";
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Стр = "Результат выполнения:"+Символы.ПС+
+"Файл: "+ВыбФайл.ПолноеИмя+Символы.ПС+
+"Имя: "+ ВыбФайл.Имя+Символы.ПС+
+"Имя без расширения: "+ВыбФайл.ИмяБезРасширения+Символы.ПС+
+"Расширение: "+ВыбФайл.Расширение+Символы.ПС+
+"Путь: "+ВыбФайл.Путь+Символы.ПС+
+"Размер: "+ВыбФайл.Размер()+Символы.ПС+
+"Это файл: "+ВыбФайл.ЭтоФайл()+Символы.ПС+
+"Время изменения: "+ВыбФайл.ПолучитьВремяИзменения()+Символы.ПС+
+"Только чтение: "+ВыбФайл.ПолучитьТолькоЧтение()+Символы.ПС+
+"Невидимость: "+ВыбФайл.ПолучитьНевидимость();
Сообщить(Стр);
Иначе
Предупреждение("Файл не найден!");
КонецЕсли;
ПоказатьОстанется только присвоить его в реквизит каталога
Sub ВыгрузкаВpdf()
Dim fileSaveName As String
Dim namef As String
Dim path As String
Dim FullName
FullName = "C:\Users\Владелец\Desktop\Ежедневный"
namef = CStr(Sheets("Лист3").Range("K1").Value)
path = FullName
fileSaveName = path & namef & ".pdf"
MsgBox (namef)
Sheets("Лист2").ExportAsFixedFormat Type:=xlTypePDF, filename:=(fileSaveName), _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
Показать
Прикрепление и извлечение различных файлов из книги Excel
https://excelvba.ru/code/tools/Attachments
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот