1. mars207 27 06.12.18 09:10 Сейчас в теме

Загрузка данных из Excel. Картинка встроенная в ячейку

Возникла необходимость загрузить с Excel некий каталог договоров в УТ 10. Вроде ничего необычного, но есть одна колонка, где в каждую ячейку вставлен объект PDF. И этот объект нужно загрузить в базу. Трудность в том, что не получается к нему добраться. Подскажите в какую сторону копать?
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
12. Harmful 06.12.18 11:10 Сейчас в теме +2 $m
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 = Неопределено;
				
				ФайлКартинки = Новый Файл(ПолноеИмяФК);
				Если ФайлКартинки.Существует() Тогда
					Возврат ПолноеИмяФК;
				Иначе
					Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
					Возврат Неопределено;
				КонецЕсли;
			Исключение
				Сообщить(ОписаниеОшибки());
				Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
				Возврат Неопределено;
			КонецПопытки;
			
		КонецЕсли;
	КонецЦикла;
	
	Возврат Неопределено;
КонецФункции
Показать
Остальные ответы
Избранное Подписка Сортировка: Древо
12. Harmful 06.12.18 11:10 Сейчас в теме +2 $m
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 = Неопределено;
				
				ФайлКартинки = Новый Файл(ПолноеИмяФК);
				Если ФайлКартинки.Существует() Тогда
					Возврат ПолноеИмяФК;
				Иначе
					Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
					Возврат Неопределено;
				КонецЕсли;
			Исключение
				Сообщить(ОписаниеОшибки());
				Сообщить("Не удалось экспортировать картинку из строки " + НомерСтроки + " колонки " + НомерКолонки + " в " + ПолноеИмяФК);
				Возврат Неопределено;
			КонецПопытки;
			
		КонецЕсли;
	КонецЦикла;
	
	Возврат Неопределено;
КонецФункции
Показать
13. mars207 27 06.12.18 15:07 Сейчас в теме
(12) Это что-то похоже. Объекты видит. Для PDF GraphicObject.Type = 10. Правда дальше продвинуться пока не удалось. Путь файла не удалось раздобыть. В любом случае спасибо. Может это ниточка к правильному выходу
2. Bene_Valete 42 06.12.18 09:45 Сейчас в теме
Есть возможность получить строкой полный путь файла?
4. mars207 27 06.12.18 09:56 Сейчас в теме
(2)В том то и дело что не понял как это сделать. В самой ячейке пусто все. Список объектов не вижу
6. Bene_Valete 42 06.12.18 10:17 Сейчас в теме
(4) То есть в ячейке, если смотреть в отладке в 1с пусто? Тогда добавьте в экселе еще одну колонку и в ее формуле пропишите, что она должна из колонки с файлом брать только путь (функцией "ЗАМЕНИТЬ" уберите лишнее из ячейки, оставив только путь к файлу). И далее работайте уже с ним в 1с
Прикрепленные файлы:
8. mars207 27 06.12.18 10:42 Сейчас в теме
(6)Если смотреть в отладке 1с, то в ячейке пусто. И есть на саму ячейку установить курсор, то тоже пусто. Адрес показывает если установить курсор на сам объект (рисунок, PDF или что-то еще). И вот как раз этот адрес нужен, но как его достать без понятия
9. Bene_Valete 42 06.12.18 10:48 Сейчас в теме
(8) А при переводе из экселя в 1с как добавляете значение в ячейку, таким образом:
Ячейка = Лист.Cells(счСтрок, счКолонок).Value;

?
3. Bene_Valete 42 06.12.18 09:48 Сейчас в теме
Если да, то из него можно получать сам файл:
ИмяФайла = "C:\Test\readme.txt";
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
    Стр = "Результат выполнения:"+Символы.ПС+
    +"Файл: "+ВыбФайл.ПолноеИмя+Символы.ПС+
    +"Имя: "+ ВыбФайл.Имя+Символы.ПС+
    +"Имя без расширения: "+ВыбФайл.ИмяБезРасширения+Символы.ПС+
    +"Расширение: "+ВыбФайл.Расширение+Символы.ПС+
    +"Путь: "+ВыбФайл.Путь+Символы.ПС+
    +"Размер: "+ВыбФайл.Размер()+Символы.ПС+
    +"Это файл: "+ВыбФайл.ЭтоФайл()+Символы.ПС+
    +"Время изменения: "+ВыбФайл.ПолучитьВремяИзменения()+Символы.ПС+
    +"Только чтение: "+ВыбФайл.ПолучитьТолькоЧтение()+Символы.ПС+
    +"Невидимость: "+ВыбФайл.ПолучитьНевидимость();  
    Сообщить(Стр);
Иначе
    Предупреждение("Файл не найден!");
КонецЕсли;

Показать


Останется только присвоить его в реквизит каталога
5. mars207 27 06.12.18 09:57 Сейчас в теме
(3) Сам файл получить будет не проблема. Вот путь как раз и нужно вытащить
7. Timur.V 33 06.12.18 10:39 Сейчас в теме
Возможно, поможет
пример получения картинки, ссылка.
10. Timur.V 33 06.12.18 10:51 Сейчас в теме
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
Показать
11. Timur.V 33 06.12.18 11:02 Сейчас в теме
Прикрепление и извлечение различных файлов из книги Excel
https://excelvba.ru/code/tools/Attachments
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Разработчик 1С
Москва
зарплата от 100 000 руб. до 160 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб.
Полный день

Консультант-аналитик 1С
Санкт-Петербург
Полный день

Консультант-аналитик 1С
Москва
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Senior 1C Developer ЛЮБОЙ ГОРОД
Москва
зарплата от 80 000 руб.
Полный день