Здравствуйте!
Сегодня поговорим об Excel – прекрасной программе для работы с таблицами. Многие знают, что эта программа достаточно сложная и объемная, но не все догадываются, что ее потенциал возрастает в десятки раз при использовании средств VBA – макросов.
О написании макросов на языке программирования VBA (Visual Basic for Application) написаны тонны статей и сняты километры видео. Я, быть может, добавлю своих пять центов и как-нибудь напишу, чем мне нравится VBA. А в данном посте я всего лишь хочу показать, что область применения макросов выходит далеко за пределы простых вычислений.
Что делаем?
Займемся необычным делом – напишем макрос, который красит ячейки листа книги Excel по выбранной нами фотографии. Спросите: «А зачем это нужно?» «Да кто ж его знает, просто прихоть такая» - отвечу я.
Я долго думал, в каких случаях такое может пригодиться…очень долго думал, чесслово, но так и не придумал. Да и вообще, почему все должно иметь смысл? Вон сколько песен популярных не несет в себе никакого смысла, но вы ж не спрашиваете певцов, зачем они их исполняют?
Как решаем проблему?
Предположим, что вы нашли причину для данной операции (кстати, поделитесь в комментариях, если придумали, где такое может быть полезно?). Осталось найти путь к реализации. Не буду ходить вокруг да около, подход здесь простой:
- Читаем изображение попиксельно.
- Считываем значения RGB (как известно, это один из способов передачи цвета).
- Каждому пикселю присваиваем соответствующую по положению ячейку листа (например, вторая слева в пятом ряду), назначаем ей цвет из п.2
- Уменьшаем размер затронутых ячеек, чтобы изображение можно было посмотреть полностью.
Конечно, тут есть небольшие технические трудности. Например, информация о пикселях идет одной строкой, следовательно, позицию пикселя изображения (строку и столбец) надо вычислять. Ну и, собственно, сами значения RGB бинарные, так что необходимо воспользоваться функциями перевода из «101010» в целые числа… но разве для патриотов есть преграды? 😊
Результат
Макрос работает достаточно быстро. Решил напоследок покрасить лист под фоновое изображение этого канала.
Я не стал выкладывать код здесь, вряд ли кого-то сильно заинтересует читать пост, состоящий из кода. Но если у кого-то есть желание, то подписывайтесь на канал и напишите в комментариях к этому посту - если будут желающие, то я создам пост для подписчиков с этим (и не только) кодом.
P.S. Для доступа к изображениям через VBA я использовал:
Set img = CreateObject("WIA.ImageFile")