Comments (6)
Привет! Пока не знаю, как это лучше сделать. Есть пока только один способ (согласен, что через одно место, но всё же):
`
class PhpExcelTemplatorOds extends PhpExcelTemplator
{
@Override
public static function outputToFile($templateFile, $fileName, $params, $callbacks=[])
{
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
$spreadsheet = $reader->load($templateFile);
$sheet = $spreadsheet->getActiveSheet();
$templateVarsArr = $sheet->toArray();
static::renderWorksheet($sheet, $templateVarsArr, $params, $callbacks);
static::outputSpreadsheetToFile($spreadsheet, $fileName);
}
@Override
public static function saveToFile($templateFile, $fileName, $params, $callbacks=[])
{
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
$spreadsheet = $reader->load($templateFile);
$sheet = $spreadsheet->getActiveSheet();
$templateVarsArr = $sheet->toArray();
static::renderWorksheet($sheet, $templateVarsArr, $params, $callbacks);
static::saveSpreadsheetToFile($spreadsheet, $fileName);
}
}
// Пример использования
PhpExcelTemplatorOds::saveToFile($templateFile, $fileName, $params);
`
Не проверял, конечно, но, вроде, должно работать.
from php-excel-templator.
Спасибо за оперативный ответ!
Попробовал Ваш метод, не создавая новый класс, а изменив PhpExcelTemplator.
В лоб - была ошибка при открытии выгруженного файла. После минимальных изменений в классе - всё заработало, но вообще без сохранения форматирования из шаблона :(
Может быть есть какие-то мысли?
Вот мой переделанный основной класс.
PhpExcelTemplator.zip
from php-excel-templator.
Поправил код:
<?php
use alhimik1986\PhpExcelTemplator\PhpExcelTemplator;
require( __DIR__ . '/../Bootstrap.php');
class PhpExcelTemplatorOds extends PhpExcelTemplator
{
/**
* {@inheritDoc}
*/
public static function outputToFile($templateFile, $fileName, $params, $callbacks=[])
{
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
$spreadsheet = $reader->load($templateFile);
$sheet = $spreadsheet->getActiveSheet();
$templateVarsArr = $sheet->toArray();
static::renderWorksheet($sheet, $templateVarsArr, $params, $callbacks);
static::outputSpreadsheetToFile($spreadsheet, $fileName);
}
/**
* {@inheritDoc}
*/
public static function saveToFile($templateFile, $fileName, $params, $callbacks=[])
{
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
$spreadsheet = $reader->load($templateFile);
$sheet = $spreadsheet->getActiveSheet();
$templateVarsArr = $sheet->toArray();
static::renderWorksheet($sheet, $templateVarsArr, $params, $callbacks);
static::saveSpreadsheetToFile($spreadsheet, $fileName);
}
/**
* {@inheritDoc}
*/
public static function outputSpreadsheetToFile(\PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet, $fileName)
{
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Ods');
self::setHeaders(basename($fileName));
$writer->save('php://output');
}
/**
* {@inheritDoc}
*/
public static function saveSpreadsheetToFile(\PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet, $fileName)
{
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Ods');
$writer->save($fileName);
}
}
PhpExcelTemplatorOds::saveToFile('./template.ods', './exported_file.ods', [
'{current_date}' => date('d-m-Y'),
'{department}' => 'Sales department',
]);
Единственный нюанс, что в ods-документах активный лист почему-то всегда последний. Поэтому, чтобы не было путаницы с листами, лучше удалить ненужные листы в шаблоне, оставить один лист, в котором находятся шаблонные переменные. Тогда всё заработает.
from php-excel-templator.
Добрый день!
Пытался запускать Ваш код и так как есть, и с вариациями.
Работает, но форматирование, заданное в шаблоне так и не появилось :(
Прилагаю архив с шаблоном, php-файлом и результирующим ods-файлом...
special_template.zip
Пока решал этот вопрос, появился другой... Можно ли вставлять картинки вашим шаблонизатором? Не обязательно в ODS формат.. Хотя бы в Excel.
Было бы очень здорово, если бы способ вставки картинки был бы так же прост, как и данных.
Например:
`
$params = [
'{name}' => 'John',
'[+picture+]' => 'data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j
vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA
Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0Cc
guWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7'
]
`
from php-excel-templator.
Картинки вставляй через стили (styles), так как в них есть доступ к ячейке:
$callbacks = [
'{image}' => function(CallbackParam $param) {
$sheet = $param->sheet;
$cell_coordinate = $param->coordinate;
$cell = $sheet->getCell($cell_coordinate);
// Устанавливаем картинку в ячейку
..............
},
];
PhpExcelTemplator::saveToFile($templateFile, $fileName, $params, $callbacks);
А как картинку можно вставлять - посмотри в этом примере:
http://www.walkswithme.net/writing-images-to-the-excel-sheet-using-phpexcel
Почему форматирование теряется в *.ods файлах - пока не разобрался. Возможно это бага такая в самом spreadsheet.
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 4
- Добавление символов в ячейку шаблона с идентификатором массива 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.