Каталог решений - Сохранение картинки из MS Excel в файл без использования внешних компонент

Сохранение картинки из MS Excel в файл без использования внешних компонент

Сохранение картинки из MS Excel в файл без использования внешних компонент

В наличии

Казалось бы, чего может быть проще, чем выгрузить картинку из excel: найди объект картинки, у объекта найди метод Save или Export или что-нибудь подобное, но не сложнее того.

Категория:

Описание

Простого пути не нашел, пришлось идти окольными путями.

Конечно же, сначала в интернет… обнаружил, что люди сталкиваются с теми же проблемами, что и я.


Немного об объектной модели Excel.


1. Приложение: Application. Приложение мы создаем так:

    Application = Новый COMОбъект(«Excel.Application»);

 

2. Приложение имеет колекцию книг: Application.Workbooks.

Файл эксель открывается как книга Workbook, т.е. элемент коллекции Workbooks, например,

    Workbook = Application.Workbooks.Item(0);

или когда хотим открыть файл-excel

    Workbook = Application.Workbooks.Open(ПутьКФайлу);

 

3. Коллекция листов и диаграмм Workbook.Sheets,

можно и по отдельности обойти коллекцию листов Workbook.Worksheets и коллекцию диаграмм Workbooks.Charts, а можно одним махом через коллекцию Sheets.

Каждый элемент этой коллекции (лист или диаграмма) имеют свойство  Shapes с коллекцией объектов Shape, дословно «фигура».

 

4. Коллекция фигур Sheet.Shapes содержит коллекцию различных графических объектов листа или диаграммы.

В числе этих графических объектов можно найти и картинку.

 

5. Картинка. Каждый элемент Shape коллекции Shapes имеет свойство Shape.Type, которое принимает значения перечисления MsoShapeType. Одно из значений этого перечислений MsoShapeType.msoPicture = 13. То, что нужно.

Таким образом мы можем найти все объекты картинок в любом файле MS Excel, и это не сложно. 


6. Картинку в файл. А вот, что делать каждым объектом Shape, чтобы его выгрузить в файл — это уже вопрос.

Методов у фигуры Shape много. Единственный, хоть как-то касающийся вопроса, это метод CopyPicture, при вызове этого метода картинка копируется в буфер обмена. От чего легче не становится.

Встает другой вопрос, как достать из буфера картинку, или переложить в другой объект Excel, где есть нужные методы.

Можно было бы экспортировать лист с нужной картинкой в HTML документ, а затем в папке документа html *.files поискать картинки. Сумбурный метод.

Оказывается, удобней из буфера переложить картинку в объект диаграммы Chart, при этом подогнав размеры диаграммы под картинку, а диаграмму можно аккурат сохранить как картинку в нужный файлик. Это уже порядок.

Всем этим занимается следующая функция. Даём ей объект Shape, ИмяФайла и ТипФайла:

//  Сохранение картинки из объекта Shape в файл.
//      FilterName — строка, JPG, GIF, PNG, BMP и т.д.
Функция СохранитьКартинкуВФайл(Shape, FileName, FilterName = Неопределено) Экспорт

    //  Инициализируем константы VBA.
   
msoFalse = 0;
   
msoPicture = 13;
   
xlLineStyleNone = —4142;
   
xlWBATWorksheet = —4167;

    //  Проверяем тип объекта.
   
Если Shape.Type <> msoPicture Тогда
        Возврат Ложь;
    КонецЕсли;

    //  Создаем новую книгу с единственным листом.
   
Книга = Shape.Application.Workbooks.Add(xlWBATWorksheet);

    //  Создаем диаграмму, в которую копируем картинку.
   
Диаграмма = Книга.Worksheets.Item(1).Shapes.AddChart().Chart;

    //  Устанавливаем размер диаграммы как у картинки.
   
Диаграмма.ChartArea.Height = Shape.Height;
   
Диаграмма.ChartArea.Width = Shape.Width;

    //  Убираем границу диаграммы.
   
Диаграмма.ChartArea.Border.LineStyle = xlLineStyleNone;

    //  Убираем заполнение диаграммы.
   
Диаграмма.ChartArea.Fill.Visible = msoFalse;

    //  Копируем картинку в буфер.
   
Shape.CopyPicture();

    //  Вставляем данные в диаграмму из буфера.
   
Диаграмма.Paste();

    //  Экспортируем диаграмму в картинку (*.jpg, *.gif, *.bmp, *.png).
   
Успех = Диаграмма.Export(FileName, FilterName);

    //  Закрываем книгу без сохранения изменений.
   
Книга.Close(False);

    Возврат Успех;

КонецФункции

 

Во вложении конфигурация с примером использования функции.

has been added to your cart:
Оформление заказа