soluti / excel-generator
提供生成 Excel 文件的方法。
dev-master
2018-10-04 13:22 UTC
Requires
- php: >=7.0.0
- league/flysystem-ziparchive: ^1.0
- symfony/options-resolver: ^2.3 || ^3.0 || ^4.0
This package is auto-updated.
Last update: 2021-10-04 19:41:27 UTC
README
一个库,提供了一种简单的方法将数据导出为 XLSX 格式,包括格式化、公式、关系。
安装
要安装 SolutiExcelGenerator,请运行以下命令
$ php composer.phar require soluti/excel-generator
基本用法
创建一个 Worksheet 对象,它需要实现
`
Soluti\ExcelGenerator\WorksheetInterface`
,为了方便,您可以扩展基础Soluti\ExcelGenerator\Worksheet`
类。它提供了一个良好的起点。有关创建工作表的更多详细信息,请参阅下一节。创建一个工作簿对象并添加一个或多个工作表
$workbook = new Workbook(); $workbook->addWorksheet( new CustomWorksheet( ... ) );
- 调用 generate 方法,传递保存 xls 的文件路径(例如:
`
$workbook->generate(DIR . '/test.xlsx')`
)
创建您的 Worksheet
为了创建一个新的 Worksheet,您有两种选择
实现
`
Soluti\ExcelGenerator\WorksheetInterface`
,在这种情况下,您需要做的唯一一件事是返回一个将输出工作表原始 XML 的 Generator。`getName()` 方法返回工作表名称。扩展
`
Soluti\ExcelGenerator\Worksheet` 并实现 `getName()` 和 `getSheetData()`,后者返回表体每一行的 Generator。您还可以覆盖标题或页脚部分。
工作表的主体由行组成,在 `getSheetData()` 中,您最好使用 `yield` 逐行生成,构建行时可以使用行辅助函数
开始行后,您需要向其中添加单元格。以下存在以下辅助静态方法
对于所有方法,`
$column`
应该是 Excel 中的字母列名 - 您可以使用
### Example of custom worksheet:
```
<?php
namespace App\Excel;
use Soluti\ExcelGenerator\Worksheet\Helper\CellWriter;
use Soluti\ExcelGenerator\Worksheet\Worksheet as BaseWorksheet;
class Worksheet extends BaseWorksheet
{
const START_COLUMN = 1;
const FORMAT_NORMAL = 1;
const FORMAT_HEADER = 2;
const FORMAT_DATE = 3;
/** @var string */
private $name = 'Sheet';
/** @var $data */
private $data;
/**
* @inheritdoc
*/
public function getName(): string
{
return $this->name;
}
/**
* @return \Generator
* @throws \Soluti\ExcelGenerator\Exception\ExcelWriterException
*/
public function getSheetData()
{
yield '<sheetData>';
foreach ($this->data as $row) {
yield from $this->getDataRow($row);
}
yield '</sheetData>';
}
/**
* @return mixed
*/
public function getData()
{
return $this->data;
}
/**
* @param mixed $data
*/
public function setData($data): void
{
$this->data = $data;
}
/**
* @param array $row
*
* @return \Generator
* @throws \Soluti\ExcelGenerator\Exception\ExcelWriterException
*/
private function getDataRow(array $row)
{
$this->rowStart();
$columnIndex = self::START_COLUMN;
foreach ($row as $key => $value) {
$this->rowAddCell(
$this->getCell(
CellWriter::getColumnIndex($columnIndex),
$this->rowIndex(),
$value
)
);
$columnIndex++;
}
yield $this->rowEnd();
}
/**
* @param string $column
* @param int $row
* @param $value
* @return string
*/
protected function getCell(string $column, int $row, $value)
{
if (is_numeric($value)) {
return CellWriter::getNumericCell($column, $row, $value, self::FORMAT_NORMAL);
}
if ($value instanceof \DateTime) {
return CellWriter::getDateCell($column, $row, $value, self::FORMAT_DATE);
}
if (is_string($value)) {
return CellWriter::getInlineCell($column, $row, $value, self::FORMAT_NORMAL);
}
throw new \LogicException('Unknown type passed to proxy method');
}
}
```
## To Do:
- Create a style manager + integrate with Worksheet
- Create a shared string manager + helper methods