Comments (4)
Приветствую. К сожалению формулы, как и все статичные значения, не дублируются. Дублируются (растягиваются) только шаблонные переменные. То есть там, где нужно "растянуть" формулу, надо вставить так же шаблонную переменную, а в коде (в качестве значений шаблонной переменной) вставлять массив формул ['=A1+B1', '=A2+B2'].
from php-excel-templator.
Благодарю! Я сделал событие, которое добавляет шаблон [! !] для формул и статичных параметров. Но возникла проблема. Для того, чтобы получить количество добавляемых строк мне пришлось, добавить $params в функцию для AFTER_INSERT_PARAMS.
Сделал я это естественно в папке vendor - src/PhpExcelTemplator.php 88 строка.
Стало вот так: $events[self::AFTER_INSERT_PARAMS]($sheet, $templateVarsArr, $params);
Может быть есть другое решение?
Вот мой код, возможно он пригодится:
$events = [
PhpExcelTemplator::AFTER_INSERT_PARAMS => function(Worksheet $sheet, array $templateVarsArr, array $params)
{
foreach ($templateVarsArr as $rowKey => $row) {
foreach ($row as $colKey => $colContent) {
//проверяем наличие шаблона [! !] в ячейке
preg_match('~\[!(.*?)!\]~', $colContent, $output);
if (isset($output[1])) {
for ($i = 0; $i < count($params['[timemark]']->value); $i++) {
//получаем координаты ячейки
$colIndex = $colKey + 1;
$rowIndex = $rowKey + 1;
$coordinate = Coordinate::stringFromColumnIndex($colIndex) . ($rowIndex + $i);
//если работаем с формулой, необходимо увеличить индексы иначе просто копируем значение
if(strpos($output[1], '=') !== false)
{
$pattern = "/". $rowIndex ."/i";
$replacement = $rowIndex + $i;
$string = preg_replace($pattern, $replacement, $output[1]);
$sheet->getCell($coordinate)->setValue($string);
}
else
$sheet->getCell($coordinate)->setValue($output[1]);
}
}
}
}
},
];
Вот как это выглядит в шаблоне
:
from php-excel-templator.
Ну нельзя же так просто взять и тупо увеличить на +1 всякое число, которое есть в ячейке, которое совпадает с $rowIndex
. Есть же и относительные и абсолютные (ячейки, которые нельзя увеличивать), а может встретиться константа, которая может совпасть с $rowIndex
.
Как мне кажется, автоматическое увеличение индекса ячеек в формулах - это большая задача, для которой нужно создавать целый класс (или несколько). И там нужно учитывать все нюансы, да и без багов не обойдётся. А баги в формулах (особенно редкие) - это, поверь, очень отвратительно, очень много ответственных данных могут быть в этих формулах. Поэтому такую ответственную задачу я лучше переложу на пользователя. Благо, что гибкость это позволяет сделать.
from php-excel-templator.
Согласен. Это очень сырое решение. Но другого я пока не нашел к сожалению. В моем частном случае это работает с горем пополам так как формулы в моем шаблоне идентичные. И не содержат ничего другого.
from php-excel-templator.
Related Issues (20)
- Small bug fix - BEFORE_SAVE proposal
- how can I use the template not from a file, but from DB blob field? HOT 1
- PhpSpreadsheet introduced a breaking change in 1.13.0 HOT 3
- Comments in english HOT 1
- Double header : open in 2 times with firefox 77.0.0 HOT 1
- No graph saved HOT 1
- [feature] Allow export graph HOT 2
- too many rows HOT 4
- Группировка строк и/или колонок
- Generate the result within the brackets []
- Загрузка изображений в ячейку. HOT 1
- Добавление символов в ячейку шаблона с идентификатором массива HOT 1
- Invalid cell coordinate A-1 at HOT 5
- Cells pushed down after first table
- Formula cells have their contents changed
- Изменить высоту всего ряда в зависимости от значения в ячейке HOT 2
- Option for CellSetterArrayValueSpecial to fill down formulas alongside it HOT 2
- Вставляются пустые строки HOT 3
- После сохранения файла эксель восстанавливает ошибки HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from php-excel-templator.