Применение формул листа диаграммы в презентациях с помощью PHP
О формулах листов данных диаграмм в презентациях
Chart spreadsheet (или лист диаграммы) в презентации является источником данных диаграммы. Chart spreadsheet содержит данные, которые графически отображаются на диаграмме. При создании диаграммы в PowerPoint автоматически создаётся связанный с ней лист. Лист диаграммы создаётся для всех типов диаграмм: линейной, столбчатой, витковой, круговой и т.д. Чтобы увидеть лист диаграммы в PowerPoint, необходимо двойным щелчком по диаграмме:

Лист диаграммы содержит имена элементов диаграммы (Category Name: Category1, Serie Name) и таблицу с числовыми данными, соответствующими этим категориям и сериям. По умолчанию при создании новой диаграммы данные листа диаграммы заполняются значениями по умолчанию. Затем вы можете вручную изменить данные листа в рабочем листе.
Обычно диаграмма представляет сложные данные (например, финансовые аналитики, научные аналитики), имея ячейки, рассчитанные на основе значений в других ячейках или из других динамических данных. Ручной расчёт значения ячейки и «жёсткое» запись его в ячейку усложняют последующее изменение. При изменении значения определённой ячейки все зависимые от неё ячейки также потребуют обновления. Кроме того, данные таблицы могут зависеть от данных других таблиц, создавая сложную схему данных презентации, которую необходимо обновлять легко и гибко.
Chart spreadsheet formula в презентации — это выражение для автоматического вычисления и обновления данных листа диаграммы. Формула листа определяет логику вычисления данных для определённой ячейки или набора ячеек. Формула листа может быть математической или логической, используя: ссылки на ячейки, математические функции, логические операторы, арифметические операторы, функции преобразования, строковые константы и т.д. Определение формулы записывается в ячейку, и эта ячейка не содержит простого значения. Формула вычисляет значение и возвращает его, после чего значение присваивается ячейке. Формулы листов диаграмм в презентациях на самом деле такие же, как формулы Excel, и поддерживают те же стандартные функции, операторы и константы.
In Aspose.Slides лист диаграммы представлен методом ChartData::getChartDataWorkbook типа ChartDataWorkbook. Формулу листа можно назначать и изменять с помощью метода ChartDataCell::setFormula. Следующий функционал поддерживается для формул в Aspose.Slides:
- логические константы
- числовые константы
- строковые константы
- константы ошибок
- арифметические операторы
- операторы сравнения
- ссылки на ячейки в стиле A1
- ссылки на ячейки в стиле R1C1
- предопределённые функции
Обычно электронные таблицы сохраняют последние вычисленные значения формул. Если после загрузки презентации данные диаграммы не изменились, метод ChartDataCell::getValue возвращает эти значения при чтении. Но если данные листа были изменены, при чтении значения он бросает CellUnsupportedDataException, поскольку формулы не поддерживаются. Это происходит потому, что при успешном разборе формул определяются зависимости ячеек и проверяется корректность последних значений. Если формула не может быть разобрана, корректность значения ячейки гарантировать невозможно.
Добавить формулу листа диаграммы в презентацию
Сначала добавьте диаграмму на первый слайд новой презентации с помощью ShapeCollection::addChart. Лист диаграммы создаётся автоматически и к нему можно получить доступ методом ChartData::getChartDataWorkbook: ```php $pres = new Presentation(); try { $chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::ClusteredColumn, 150, 150, 500, 300); $workbook = $chart->getChartData()->getChartDataWorkbook(); # … } finally { if (!java_is_null($pres)) { $pres->dispose(); } }
Запишем некоторые значения в ячейки с помощью метода [**ChartDataCell::setValue**](https://reference.aspose.com/slides/php-java/aspose.slides/chartdatacell/#setValue) типа **Object**, что означает, что можно установить любое значение: ```php
$workbook->getCell(0, "F2")->setValue(-2.5);
$workbook->getCell(0, "G3")->setValue(6.3);
$workbook->getCell(0, "H4")->setValue(3);
Чтобы записать формулу в ячейку, можно использовать метод ChartDataCell::setFormula.
Примечание: метод ChartDataCell::setFormula используется для установки ссылок на ячейки в стиле A1.
Чтобы задать формулу в стиле R1C1, можно использовать метод ChartDataCell::setR1C1Formula.
Затем, если попытаться считать значения из ячеек B2 и C2, они будут вычислены: ```php $value1 = $cell1->getValue();// 7.8
$value2 = $cell2->getValue();// 2.1
## **Логические константы**
Можно использовать логические константы, такие как *FALSE* и *TRUE*, в формулах ячеек: ```php
$workbook->getCell(0, "A2")->setValue(false);
$cell = $workbook->getCell(0, "B2");
$cell->setFormula("A2 = TRUE");
$value = $cell->getValue();// значение содержит логическое "false"
Числовые константы
Числа могут использоваться в обычной или научной нотации для создания формул листа диаграммы: ```php $workbook->getCell(0, “A2”)->setFormula(“1 + 0.5”); $workbook->getCell(0, “B2”)->setFormula(".3 * 1E-2");
## **Строковые константы**
Строковая (или буквальная) константа — это конкретное значение, которое используется как есть и не изменяется. Строковые константы могут быть: даты, тексты, числа и т.д.: ```php
$workbook->getCell(0, "A2")->setFormula("\"abc\"");
$workbook->getCell(0, "B2")->setFormula("\"2/3/2020 12:00\"");
Константы ошибок
Иногда невозможно вычислить результат формулы. В этом случае в ячейке отображается код ошибки вместо её значения. Каждый тип ошибки имеет свой код:
- #DIV/0! — формула пытается делить на ноль.
- #GETTING_DATA — может отображаться в ячейке, пока её значение ещё вычисляется.
- #N/A — информация отсутствует или недоступна. Причины могут быть: ячейки, используемые в формуле, пусты, присутствует лишний пробел, опечатка и т.д.
- #NAME? — определённую ячейку или объект формулы нельзя найти по имени.
- #NULL! — может появиться при ошибке в формуле, например: (,) или пробел вместо двоеточия (:).
- #NUM! — числовое значение в формуле может быть недействительным, слишком большим или маленьким и т.п.
- #REF! — недействительная ссылка на ячейку.
- #VALUE! — неожиданный тип значения. Например, строковое значение в числовой ячейке.
$cell = $workbook->getCell(0, "A2");
$cell->setFormula("2 / 0");
$value = $cell->getValue();// значение содержит строку "#DIV/0!"
Арифметические операторы
Можно использовать все арифметические операторы в формулах листа диаграммы:
| Оператор | Значение | Пример |
|---|---|---|
| + (plus sign) | Сложение или унарный плюс | 2 + 3 |
| - (minus sign) | Вычитание или отрицание | 2 - 3 -3 |
| * (asterisk) | Умножение | 2 * 3 |
| / (forward slash) | Деление | 2 / 3 |
| % (percent sign) | Процент | 30% |
| ^ (caret) | Возведение в степень | 2 ^ 3 |
Примечание: Чтобы изменить порядок вычисления, заключите в круглые скобки часть формулы, которая должна вычисляться первой.
Операторы сравнения
Можно сравнивать значения ячеек с помощью операторов сравнения. При сравнении двух значений с использованием этих операторов результатом является логическое значение TRUE или FALSE:
| Оператор | Значение | Пример |
|---|---|---|
| = (equal sign) | Равно | A2 = 3 |
| <> (not equal sign) | Не равно | A2 <> 3 |
| > (greater than sign) | Больше чем | A2 > 3 |
| >= (greater than or equal to sign) | Больше или равно | A2 >= 3 |
| < (less than sign) | Меньше чем | A2 < 3 |
| <= (less than or equal to sign) | Меньше или равно | A2 <= 3 |
Ссылки на ячейки в стиле A1
Ссылки на ячейки в стиле A1 используются в листах, где столбец обозначается буквой (например, “A") и строка — цифрой (например, “1"). Ссылки в стиле A1 могут использоваться следующим образом:
| Ссылка на ячейку | Пример | ||
|---|---|---|---|
| Абсолютная | Относительная | Смешанная | |
| Ячейка | $A$2 | A2 | A$2 $A2 |
| Строка | $2:$2 | 2:2 | - |
| Столбец | $A:$A | A:A | - |
| Диапазон | $A$2:$C$4 | A2:C4 | $A$2:C4 A$2:$C4 |
Вот пример использования ссылки в стиле A1 в формуле:
$workbook->getCell(0, "A2")->setFormula("C3 + SUM(F2:H5)");
Ссылки на ячейки в стиле R1C1
Ссылки на ячейки в стиле R1C1 используются в листах, где как строка, так и столбец обозначаются цифрами. Ссылки в стиле R1C1 могут использоваться следующим образом:
| Ссылка на ячейку | Пример | ||
|---|---|---|---|
| Абсолютная | Относительная | Смешанная | |
| Ячейка | R2C3 | R[2]C[3] | R2C[3] R[2]C3 |
| Строка | R2 | R[2] | - |
| Столбец | C3 | C[3] | - |
| Диапазон | R2C3:R5C7 | R[2]C[3]:R[5]C[7] | R2C3:R[5]C[7] R[2]C3:R5C[7] |
Вот пример использования ссылки в стиле R1C1 в формуле:
$workbook->getCell(0, "A2")->setR1C1Formula("R2C4 + SUM(R5C6:R7C9)");
Предопределённые функции
Существуют предопределённые функции, которые можно использовать в формулах для упрощения их реализации. Эти функции инкапсулируют наиболее часто используемые операции, такие как:
- ABS
- AVERAGE
- CEILING
- CHOOSE
- CONCAT
- CONCATENATE
- DATE (1900 date system)
- DAYS
- FIND
- FINDB
- IF
- INDEX (reference form)
- LOOKUP (vector form)
- MATCH (vector form)
- MAX
- SUM
- VLOOKUP
FAQ
Поддерживаются ли внешние файлы Excel в качестве источника данных для диаграммы с формулами? Да. Aspose.Slides поддерживает внешние книги как источник данных диаграммы, что позволяет использовать формулы из файла XLSX вне презентации.
Могут ли формулы диаграммы ссылаться на листы внутри той же книги по имени листа? Да. Формулы следуют стандартной модели ссылок Excel, поэтому можно ссылаться на другие листы внутри той же книги или внешней книги. Для внешних ссылок необходимо указывать путь и имя книги, используя синтаксис Excel.