![]() |
![]() |
|
Размер изображения в excel | ☑ | ||
---|---|---|---|---|
0
unTonee
01.12.09
✎
20:03
|
Доброго времени суток!
Подскажите как узнать настоящий размер изображения (не отмасштабированный) в Excel? Свойства Height и Width, коллекции Pictures - возвращают отмасштабированные размеры. |
|||
1
Волшебник
модератор
01.12.09
✎
21:08
|
С таким стажем стыдно спрашивать. Найди в гугле и запости сюда ответ.
|
|||
2
пента
01.12.09
✎
21:19
|
величина мистостажа = гуглокомпетентности :)
|
|||
3
unTonee
02.12.09
✎
08:50
|
Ладно, пристыдили...
Даже больше, напишу краткое описание по перегрузке данных из excel с изображениями. Думаю многим будет полезно. |
|||
4
unTonee
28.12.09
✎
10:58
|
Как обещал, опишу процесс загрузки картинок из эксель в ИБ.
Постановку задачи: есть файл с данными о товарах и его изображений в формате excel. Каждая строка файла это отдельный товар, вся информация по одному товару находиться в одной строке. Предполагается, что все товары находятся на одном листе. Необходимо перегружать в базу товары из подобных файлов. Излагать буду кратко: • Подключение к Excel и отключение: Попытка Excel = Новый COMОбъект ("Excel.Application"); WorkBook= Excel.Workbooks.Open(ПутьКФайлу, , True); Sheet = WorkBook.Worksheets(1);//Предполагаем, что картинки на первом листе. Исключение Сообщить("Произошла ошибка: " + ОписаниеОшибки(), СтатусСообщения.Важное); КонецПопытки; Процедура ЗакрытьExcel() Попытка WorkBook.Close(); Excel.Quit(); Sheet = Неопределено; WorkBook = Неопределено; Excel = Неопределено; Исключение Сообщить("Возникла ошибка:" + ОписаниеОшибки(), СтатусСообщения.Внимание); Сообщить(" Загрузка невозможна!"); КонецПопытки; КонецПроцедуры • Парсинг excel-файла – поиск картинок и вывод товара с поиском соответствия в информаицонной базе: ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("name"); ТЗ.Колонки.Добавить("width"); ТЗ.Колонки.Добавить("height"); ТЗ.Колонки.Добавить("TopLeftCell"); ТЗ.Колонки.Добавить("ID"); // //Для Каждого Изображ Из Sheet.Shapes Цикл // НовСтр = ТЗ.Добавить(); // НовСтр.name = Изображ.name; // НовСтр.width = Изображ.width; // НовСтр.height = Изображ.height; //КонецЦикла; Для Каждого Img Из Sheet.Pictures Цикл НовСтр = ТЗ.Добавить(); НовСтр.name = Img.name; НовСтр.width = Img.width; НовСтр.height = Img.height; НовСтр.ID = Img.ShapeRange.ID; // выделение номера строки TopLeftCell = Img.TopLeftCell.Address; Бакс = Найти(TopLeftCell, "$"); TopLeftCell = Сред(TopLeftCell, Бакс+1, СтрДлина(TopLeftCell)); Бакс = Найти(TopLeftCell, "$"); TopLeftCell = Сред(TopLeftCell, Бакс+1, СтрДлина(TopLeftCell)); НовСтр.TopLeftCell = Число(TopLeftCell); КонецЦикла; ДлиннаСтрок = ПоследняяСтрока(Sheet); // ПОследняя строка в excel файле ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных"); ФормаПрогрессора.Значение = 0; ФормаПрогрессора.КомментарийЗначения = ""; ФормаПрогрессора.КомментарийОбработкиДанных = "Анализ строк файла Excel"; ФормаПрогрессора.МаксимальноеЗначение = ДлиннаСтрок; ФормаПрогрессора.НаименованиеОбработкиДанных = "Загрузка данных из " + ИмяФайла; ФормаПрогрессора.Открыть(); Для нСтр=НаименованияСоСтроки По ДлиннаСтрок Цикл ФормаПрогрессора.Значение = нСтр; ExcelНаименование = СокрЛП(Sheet.Cells(нСтр, СтолбецНаименований).Text); Если ExcelНаименование <> "" Тогда Стр = тпСопоставление.Добавить(); Стр.НазваниеВЭксель = ExcelНаименование; Стр.НСExcel = нСтр; НайденнаяСтрока = ТЗ.Найти(нСтр, "TopLeftCell"); Если НайденнаяСтрока <> Неопределено Тогда Стр.Изображение = НайденнаяСтрока.name; С = Соответствие(ExcelНаименование); Если С <> Неопределено Тогда Стр.Найдено = Истина; Стр.Номер = С.Номер; Стр.Товар = С.Товар; Стр.Загружать = Истина; КонецЕсли; КонецЕсли; КонецЕсли; ФормаПрогрессора.КомментарийЗначения = "Обработка строки:" + нСтр + ", товар " + ExcelНаименование; КонецЦикла; ФормаПрогрессора.Закрыть(); тпСопоставление.Сортировать("Изображение УБЫВ, НСExcel ВОЗР"); Определение, где заканчивается excel-лист – его последняя строка. Функция ПоследняяСтрока(Sheet) Стр = Sheet.UsedRange.Address; ПозРазделителя = Найти(Стр, ":"); Если ПозРазделителя > 0 Тогда Стр = Сред(Стр, ПозРазделителя, СтрДлина(Стр)); Стр = СтрЗаменить(Стр, "$", ""); Стр = СтрЗаменить(Стр, "I", ""); Стр = СтрЗаменить(Стр, ":", ""); Возврат Число(Стр); Иначе Возврат -1; КонецЕсли; КонецФункции Процедура выгрузка изображений и прописывание их в справочнике товаров: Процедура КнопкаВыполнитьНажатие(Кнопка) Каталог=КаталогИБ()+"Фото"; ПроверитьКаталог(Каталог); //Каталог = "C:\Temp\"; ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных"); ФормаПрогрессора.Значение = 0; ФормаПрогрессора.КомментарийЗначения = ""; ФормаПрогрессора.КомментарийОбработкиДанных = "Выгрузка изображений из Excel"; ФормаПрогрессора.МаксимальноеЗначение = Sheet.Pictures.Count; ФормаПрогрессора.НаименованиеОбработкиДанных = "Выгрузка данных из " + ИмяФайла; ФормаПрогрессора.Открыть(); // Обход всей коллекции картинок Excel // и сохранение картинок у которых стоит флаг соответствие и загружать Для Каждого Img Из Sheet.Pictures Цикл ПоискСтрокаСопоставление = тпСопоставление.Найти(Img.Name, "Изображение"); ФормаПрогрессора.Значение = Img.Index; ФормаПрогрессора.КомментарийЗначения = "Картинка " + Img.Name; Если ПоискСтрокаСопоставление <> Неопределено И ПоискСтрокаСопоставление.Загружать И ПоискСтрокаСопоставление.Найдено Тогда НомерОбъект = ПоискСтрокаСопоставление.Номер.ПолучитьОбъект(); НовИмя = Каталог+Формат(НомерОбъект.Код, "ЧГ=0")+".jpg"; Найденное = ТЗ.Найти(Img.Name, "name"); //Если Найденное <> Неопределено Тогда // Сообщить("Img.name:"+Img.name); // Img.height = Найденное.height; // Img.width = Найденное.width; //КонецЕсли; str = Sheet.Name; Img.Select(); pixH = Excel.Selection.Height; pixW = Excel.Selection.Width; Excel.Selection.Copy(); Chart = Excel.Charts.Add(); Excel.ActiveChart.Location(2,str); ExACName = Excel.ActiveChart.Name; ExACName = СокрЛП(СтрЗаменить(ExACName, str, "")); Excel.ActiveSheet.Shapes(ExACName).Height = pixH * 1.001; Excel.ActiveSheet.Shapes(ExACName).Width = pixW * 1.001; Excel.ActiveChart.Paste(); Excel.ActiveChart.Export(НовИмя, "jpg"); Excel.ActiveSheet.Shapes(ExACName).Delete(); НомерОбъект.Фото = НовИмя; НомерОбъект.Записать(); КонецЕсли; ОбработкаПрерыванияПользователя(); КонецЦикла; ФормаПрогрессора.Закрыть(); ЗакрытьExcel(); КонецПроцедуры p.s. если кому интересно пишите вышлю обработку целиком на мыло. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |