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

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

Показать


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

Вакансии

Консультант по 1С:Документооборот
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист по 1С:Бухгалтерии
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист по 1С:ЗУП
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

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

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