Что такое drawings в excel
Одним из революционных нововведений в крайней версии Microsoft Excel 2010 стали инфокривые sparklines - миниграфики, помещающиеся внутри ячеек и наглядно отображающие динамику числовых данных:
Чтобы создать подобные миниграфики, нужно выделить ячейки, куда мы хотим их поместить и воспользоваться кнопками группы Спарклайны (Sparklines) с вкладки Вставка (Insert) :
В открывшемся диалоговом окне нужно задать диапазон исходных данных и диапазон вывода:
Созданные миниграфики можно всячески форматировать и настраивать с помощью динамической вкладки Конструктор (Design) :
В частности, можно легко поменять цвет линий и столбцов спарклайна и выделить особыми цветами минимальные и максимальные значения:
Поскольку спарклайн не является отдельным графическим объектом, а выступает, по сути, в роли фона ячейки, то он нисколько не помешает ввести в ячейку текст, числа или другую информацию. Это открывает простор для фантазии - если немного пошаманить с выравниванием введенного текста, шириной и высотой ячейки, то можно достичь интересных результатов:
Что делать, если у вас пока старая версия Excel? Или нужен тип графика, которого нет в наборе спарклайнов? Переходим к следующим способам!
Способ 2. Дополнительные надстройки для микрографиков
На самом деле, идея подобных графиков витала в воздухе уже достаточно давно. Еще для 2003 версии Excel существовало несколько надстроек с подобным функционалом, самым известными из которых были замечательная бесплатная Sparklines Эдварда Тафта и и платные BonaVista microcharts (169$) и Bissantz SparkMaker (200$). Да и я в свое время тоже пытался сделать что-то подобное в надстройке PLEX.
Если брать в качестве примера бесплатную надстройку Sparklines, то после ее подключения мы получим новую вкладку (или панель инструментов) примерно такого вида:
Как легко заметить, эта надстройка умеет строить заметно больше трех типов диаграмм :)
Единственный минус - надстройку нужно будет установить на всех компьютерах, где вы планируете работать с файлом, содержащим такие диаграммы.
Способ 3. Повтор символов N-раз
"Бюджетным вариантом" одномерных микрографиков являются повторяющиеся однотипные символы, имитирующие линейчатую диаграмму. Для этого можно воспользоваться текстовой функцией ПОВТОР (REPT) , которая умеет выводить в ячейку любой заданный символ нужное количество раз. Для вывода нестандартных символов (зная их код) можно использовать функцию СИМВОЛ (CHAR) . В общем и целом это выглядит так:
Символ с кодом 103 - черный прямоугольник шрифта Webdings, поэтому не забудьте установить этот шрифт для ячеек C2:C12. Также можно поиграться с символами других шрифтов, например в столбце Е использован символ с кодом 110 из шрифта Wingdings.
Способ 4. Макросы
Способ представляет собой улучшенный предыдущий вариант, где набор повторяющихся символов (используется знак "|") создает не формула, а простая пользовательская функция на VBA. Причем для каждой ячейки создается отдельный столбец, т.к. функция использует символ переноса строки после каждого числа - выглядит это примерно так:
Чтобы использовать этот трюк у себя в файле, открываем редактор VBA (Alt+F11), добавляем новый модуль в книгу (меню Insert - Module) и копируем туда код функции NanoChart:
Затем вставляем функцию NanoChart в нужные ячейки, указывая в качестве аргументов числовые данные, как на рисунке выше. Для получившихся ячеек с микрографиками необходимо включить перенос по словам и поворот на 90 градусов через меню Формат - Ячейки - Выравнивание (Format - Cells - Alignment) . Константа MaxSymbols задает длину максимально высокого столбца в минигистограмме.
Теперь в мастере функций в категории Определенные пользователем появилась новая функция LineChart c двумя аргументами - диапазоном и кодом цвета графика. Если ее вставить в пустую ячейку, например, справа от числовой строки и скопировать затем, как обычно, на весь столбец, то получим весьма симпатичное отображение числовых данных в виде миниграфиков:
Качественная визуализация большого объема информации – это почти всегда нетривиальная задача, т.к. отображение всех данных часто приводит к перегруженности диаграммы, ее запутанности и, в итоге, к неправильному восприятию и выводам.
Вот, например, данные по курсам валют за несколько месяцев:
Строить график по всей таблице, как легко сообразить, не лучшая идея. Красивым решением в подобной ситуации может стать создание интерактивной диаграммы, которую пользователь может сам подстраивать под себя и ситуацию. А именно:
- двигаться по оси времени вперед-назад в будущее-прошлое
- приближать-удалять отдельные области диаграммы для подробного изучения деталей графика
- включать-выключать отображение отдельных валют на выбор
Выглядеть это может примерно так:
Нравится? Тогда поехали.
Шаг 1. Создаем дополнительную таблицу для диаграммы
В большинстве случаев для реализации интерактивности диаграммы применяется простой, но мощный прием – диаграмма строится не по исходной, а по отдельной, специально созданной таблице с формулами, которая отображает только нужные данные. В нашем случае, в эту дополнительную таблицу будут переноситься исходные данные только по тем валютам, которые пользователь выбрал с помощью флажков:
В Excel 2007/2010 к созданным диапазонам можно применить команду Форматировать как таблицу ( Format as Table) с вкладки Главная ( Home) :
Это даст нам следующие преимущества:
- Любые формулы в таких таблицах автоматически транслируются на весь столбец – не надо «тянуть» их вручную до конца таблицы
- При дописывании к таблице новых строк в будущем (новых дат и курсов) – размеры таблицы увеличиваются автоматически, включая корректировку диапазонов в диаграммах, ссылках на эту таблицу в других формулах и т.д.
- Таблица быстро получает красивое форматирование (чересстрочную заливку и т.д.)
- Каждая таблица получает собственное имя (в нашем случае – Таблица1 и Таблица2), которое можно затем использовать в формулах.
Подробнее про преимущества использования подобных Таблиц можно почитать тут.
Шаг 2. Добавляем флажки (checkboxes) для валют
В Excel 2007/2010 для этого необходимо отобразить вкладку Разработчик ( Developer) , а в Excel 2003 и более старших версиях – панель инструментов Формы ( Forms) . Для этого:
- В Excel 2003: выберите в меню Вид – Панели инструментов – Формы (View –Toolbars –Forms)
- В Excel 2007: нажать кнопку Офис – ПараметрыExcel – Отобразить вкладку Разработчик на ленте (OfficeButton –Exceloptions –ShowDeveloperTabintheRibbon)
- В Excel 2010: Файл – Параметры – Настройка ленты – включить флаг Разрабочик (File –Options –CustomizeRibbon –Developer)
На появившейся панели инструментов или вкладке Разработчик ( Developer) в раскрывающемся списке Вставить ( Insert) выбираем инструмент Флажок ( Checkbox) и рисуем два флажка-галочки для включения-выключения каждой из валют:
Текст флажков можно поменять, щелкнув по ним правой кнопкой мыши и выбрав команду Изменить текст ( Edit text) .
Теперь привяжем наши флажки к любым ячейкам для определения того, включен флажок или нет (в нашем примере это две желтых ячейки в верхней части дополнительной таблицы). Для этого щелкните правой кнопкой мыши по очереди по каждому добавленному флажку и выберите команду Формат объекта ( Format Control) , а затем в открывшемся окне задайте Связь с ячейкой ( Cell link) .
Шаг 3. Транслируем данные в дополнительную таблицу
Теперь заполним дополнительную таблицу формулой, которая будет транслировать исходные данные из основной таблицы, если соответствующий флажок валюты включен и связанная ячейка содержит слово ИСТИНА (TRUE):
Заметьте, что при использовании команды Форматировать как таблицу ( Format as Table) на первом шаге, формула имеет использует имя таблицы и название колонки. В случае обычного диапазона, формула будет более привычного вида:
Обратите внимание на частичное закрепление ссылки на желтую ячейку (F$1), т.к. она должна смещаться вправо, но не должна – вниз, при копировании формулы на весь диапазон.
Шаг 4. Создаем полосы прокрутки для оси времени и масштабирования
Теперь добавим на лист Excel полосы прокрутки, с помощью которых пользователь сможет легко сдвигать график по оси времени и менять масштаб его увеличения.
Полосу прокрутки ( Scroll bar) берем там же, где и флажки – на панели инструментов Формы ( Forms) или на вкладке Разработчик ( Developer) :
Рисуем на листе в любом подходящем месте одну за другой две полосы – для сдвига по времени и масштаба:
Каждую полосу прокрутки надо связать со своей ячейкой (синяя и зеленая ячейки на рисунке), куда будет выводиться числовое значение положения ползунка. Его мы потом будем использовать для определения масштаба и сдвига. Для этого щелкните правой кнопкой мыши по нарисованной полосе и выберите в контекстном меню команду Формат объекта ( Format control) . В открывшемся окне можно задать связанную ячейку и минимум-максимум, в пределах которых будет гулять ползунок:
Таким образом, после выполнения всего вышеизложенного, у вас должно быть две полосы прокрутки, при перемещении ползунков по которым значения в связанных ячейках должны меняться в интервале от 1 до 307.
Шаг 5. Создаем динамический именованный диапазон
Чтобы отображать на графике данные только за определенный интервал времени, создадим именованный диапазон, который будет ссылаться только на нужные ячейки в дополнительной таблице. Этот диапазон будет характеризоваться двумя параметрами:
- Отступом от начала таблицы вниз на заданное количество строк, т.е. отступом по временной шкале прошлое-будущее (синяя ячейка)
- Количеством ячеек по высоте, т.е. масштабом (зеленая ячейка)
Этот именованный диапазон мы позже будем использовать как исходные данные для построения диаграммы.
Для создания такого диапазона будем использовать функцию СМЕЩ ( OFFSET) из категории Ссылки и массивы ( Lookup and Reference) - эта функция умеет создавать ссылку на диапазон заданного размера в заданном месте листа и имеет следующие аргументы:
В качестве точки отсчета берется некая стартовая ячейка, затем задается смещение относительно нее на заданное количество строк вниз и столбцов вправо. Последние два аргумента этой функции – высота и ширина нужного нам диапазона. Так, например, если бы мы хотели иметь ссылку на диапазон данных с курсами за 5 дней, начиная с 4 января, то можно было бы использовать нашу функцию СМЕЩ со следующими аргументами:
Хитрость в том, что константы в этой формуле можно заменить на ссылки на ячейки с переменным содержимым – в нашем случае, на синюю и зеленую ячейки. Сделать это можно, создав динамический именованный диапазон с функцией СМЕЩ ( OFFSET) . Для этого:
- В Excel 2007/2010 нажмите кнопку Диспетчер имен (NameManager) на вкладке Формулы (Formulas)
- В Excel 2003 и старше – выберите в меню Вставка– Имя– Присвоить(Insert – Name – Define)
Для создания нового именованного диапазона нужно нажать кнопку Создать ( Create) и ввести имя диапазона и ссылку на ячейки в открывшемся окне.
Сначала создадим два простых статических именованных диапазона с именами, например, Shift и Zoom, которые будут ссылаться на синюю и зеленую ячейки соответственно:
Теперь чуть сложнее – создадим диапазон с именем Euros, который будет ссылаться с помощью функции СМЕЩ ( OFFSET) на данные по курсам евро за выбранный отрезок времени, используя только что созданные до этого диапазоны Shift и Zoom и ячейку E3 в качестве точки отсчета:
Обратите внимание, что перед именем диапазона используется имя текущего листа – это сужает круг действия именованного диапазона, т.е. делает его доступным в пределах текущего листа, а не всей книги. Это необходимо нам для построения диаграммы в будущем. В новых версиях Excel для создания локального имени листа можно использовать выпадающий список Область.
Аналогичным образом создается именованный диапазон Dollars для данных по курсу доллара:
И завершает картину диапазон Labels, указывающий на подписи к оси Х, т.е. даты для выбранного отрезка:
Общая получившаяся картина должна быть примерно следующей:
Шаг 6. Строим диаграмму
Выделим несколько строк в верхней части вспомогательной таблицы, например диапазон E3:G10 и построим по нему диаграмму типа График ( Line) . Для этого в Excel 2007/2010 нужно перейти на вкладку Вставка ( Insert) и в группе Диаграмма ( Chart) выбрать тип График ( Line) , а в более старших версиях выбрать в меню Вставка – Диаграмма ( Insert – Chart) . Если выделить одну из линий на созданной диаграмме, то в строке формул будет видна функция РЯД ( SERIES) , обслуживающая выделенный ряд данных:
Эта функция задает диапазоны данных и подписей для выделенного ряда диаграммы. Наша задача – подменить статические диапазоны в ее аргументах на динамические, созданные нами ранее. Это можно сделать прямо в строке формул, изменив
=РЯД(Лист1!$F$3;Лист1! $E$4:$E$10 ;Лист1! $F$4:$F$10 ;1)
=РЯД(Лист1!$F$3;Лист1! Labels ;Лист1! Euros ;1)
Выполнив эту процедуру последовательно для рядов данных доллара и евро, мы получим то, к чему стремились – диаграмма будет строиться по динамическим диапазонам Dollars и Euros, а подписи к оси Х будут браться из динамического же диапазона Labels. При изменении положения ползунков будут меняться диапазоны и, как следствие, диаграмма. При включении-выключении флажков – отображаться только те валюты, которые нам нужны.
Таким образом мы имеем полностью интерактивную диаграмму, где можем отобразить именно тот фрагмент данных, что нам нужен для анализа.
Многие воспринимают Excel как бесконечный набор скучных строк и столбцов. На самом же деле Excel можно использовать в более позитивном ключе.
Недавно наткнулся на статью об одном японском художнике – Татсуо Хориучи, который рисует фантастические вещи с помощью стандартных средств рисования в Excel.
Татсуо впервые привлек внимание в 2006 году, на конкурсе Excel Autoshape Art. Его работа, которая была на порядок выше своих конкурентов, заняла первое место и была приобретена местным музеем Gunma Museum of Art.
На волне приобретенного энтузиазма решил тоже приобщить свой Excel к прекрасному. Мысль, пришедшая в голову, подкупила своей простотой. Листы последних версий программы содержат таблицы размером 16384 на 1048576 ячеек, другими словами, можно представить, что таблица – это растровое изображение размером 16384 х 1048576 пикселей, где в качестве пикселя выступает ячейка. Тем более, что любую ячейку можно залить любым цветом 32-хбитной палитры.
Первые робкие шаги в знакомстве Excel с растром начались с небольших изображений героев игровой приставки Dendy размером 15х15 пикселей. Рисунки получились на удивление привлекательными.
Excel при этом никак не отреагировал, а терпеливо ждал, чем еще займет его владелец. Ну, а владельцу, ничего более оригинального в голову не пришло, как продолжить эпопею возрождения героев, некогда всеми любимой, игры. Так, Excel узнал, как выглядит Марио…
… а потом Мегамен.
Апогеем моего творчества стал персонаж любимого мультфильма, из-за которого дети, приходя со школы, включали телевизор в ожидании очередного продолжения сериала.
Оценить 1 комментарий
Как вообще можно привязаться картинку к ячейке? PHPExcel_Worksheet_Drawing просто рисует сверху ячейки по сути картинку и если например сделать сортировку то картинки не двигаются вслед за ячейкой
SilverSlice Спасибо за наводку! Не много скорректировал PHPExcel и все получилось, но при условии что картинка в пределах одной ячейки (мне нужно было для прайс-листа). Если картинка вылазит за пределы этой ячейки нужно будет еще думать.
В PHPExcel есть метод setResizeProportional, но он вообще ни где не задействован в PHPExcel/Writer/Excel2007/Drawing.php @version 1.7.9.
Добавил корректировки в функцию public function _writeDrawing у меня это 172 строчка:
И еще одна правка чуть ниже
Когда создаем объект добавляем это:
Спасибо, друг.
Этот совет помог.
Больше трех лет назад тема поднималась, а вот сейчас у меня тот же вопрос возник.
Использовал PHPExcel 1.8.1, -предпоследнюю версию проекта PHPExcel , который уже несколько лет назад закрыт.
Изменил те несколько строк, которые ты указал, и все получилось!
Xlsx-файл - это zip-архив, распаковываете его средствами php и находите файл xl/drawings/drawing1.xml. В нем содержится информация о картинках на листе.
PHPExcel все картинки помещает в элементы oneCellAnchor (перемещать, но не изменять размеры), вам нужно поменять их на twoCellAnchor (перемещать и изменять объект вместе с ячейками). Обращайтесь к документации по Open Office XML за подробностями.
UPD. Реализовал этот алгоритм в библиотеке. Попробуйте, на моих тестовых данных все работает.
Нужно изменить свойства рисунка. По умолчанию подчеркнуто красным, нужно выставить отмеченное зеленой галочкой.
Ну в самом экселе разобрались.. а можно ли программно установить это свойство для изображения? В PHPExcel - судя по их форуму такой возможности нет.. есть ли платные решения, которые способны решить эту проблему?
В общем не нашёл нужной инфы, пишу сюда. Если ошибся разделом - не пинайте, пожалуйста.
Идея: вывести в ячейках Экселя картинки и в соседних столбцах какую-то инфу.
Нашёл: вставка картинок в Эксель(Лист).
Но: нигде не сказано "Как вставить картинку в Ячейку экселя". Где-то натыкался(когда-то) на "Позиционирования картинки чтобы выглядело "в ячейке".", но при изменения ширины - картинка оставалась на старом месте.
Собственно вопрос: как вставить картинку в Ячейку экселя.(Типо таблица: Картинка-Данные-Данные)
Используется "Microsoft.Office.Interop.Excel". Можно использовать сторонние библиотеки, только я не в курсе "Какие нужны для данного фокуса".
Добавление картинки в Excel
Доброго времени суток Вот только начинаю разбираться с OLE, не получается вставить картинку.
Вставка картинки в excel
Добрый день! Имеется excel файл, внутри файла в ячейках столбца "D", прописаны пути к.
Вывод картинки в Excel
Доброго времени суток. Столкнулся с проблемой вставки картинки в Excel из буфера обмена. Код.
Читал. 1-я ссылка - ОпенОфис
2 ссылка - не в ячейку. Т.е. изменяя ширину столбцов - изображение останется на месте.
nicolas2008, В вашем коде:
Я использую:
Проблема: что такое "MsoTriState", т.к. подчёркивает красным. Что я не подключил?
Проблема: что такое "MsoTriState", т.к. подчёркивает красным. Что я не подключил?
Нужно добавить ссылку на 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office14\office.dll' и добавить using Microsoft.Office.Core
А вообще на будущее - поставь Resharper и будешь получать подсказки на добавление нужных ссылок и using-ов
Добавлено через 12 минут
Кстати не забудь еще, что все обьекты, к которым обращаешся при работе с interop excel (Application, Workbook, Workbooks, Worksheet, Worksheets, Pictures, Picture и даже Range) - это COM-обьекты, поэтому если их правильно не освободить после работы, то будут утечки памяти.
Читайте также: