PHPackages                             wj/excel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. wj/excel

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

wj/excel
========

An eloquent way of importing and exporting Excel and CSV with the power of PHPExcel,come from laravel/excel

1.0.3(9y ago)0135LGPLPHPPHP &gt;=5.4.0

Since Feb 21Pushed 9y ago1 watchersCompare

[ Source](https://github.com/wangjia5693/excelshow)[ Packagist](https://packagist.org/packages/wj/excel)[ RSS](/packages/wj-excel/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (5)Used By (0)

```
导入文件

 要导入一个文件，使用：->load($filename)。配置可选。

Excel::load('file.xls', function($reader) {

    // reader methods

});

处理导入结果

 得到所有表和行

 加载一个文件后，用->get()像这样得到结果：

Excel::load('file.xls', function($reader) {

})->get();

 或者

Excel::load('file.xls', function($reader) {

    // Getting all results
    $results = $reader->get();

    // ->all() is a wrapper for ->get() and will work the same
    $results = $reader->all();

});

根据文件的数量而定，->get() 和 ->all()将返回表或者行集合，可以在import.php里面设置'force_sheets_collection'为true禁用这个功能。当设置为true时将总是返回一个表集合。

  表头属性

 默认excel文件第一行用作表头属性。

// Get the firstname
$row->firstname;

注：默认情况下，这些属性将被转换为一个段塞，在excel::import.heading里可以改变默认内容，可选值有：true|false|slugged|ascii|numeric|hashed|trans|original。当excel::import.to_ascii设置为true时，True 和 slugged 将转换为 ASCII，可以更改默认分隔符以及内部配置。

集合

 表，行和单元格都是集合，意味着之后可以跟->get()，能使用所有集合默认的方法。

// E.g. group the results
$reader->get()->groupBy('firstname');

 获得第一个表或者第一行

 要获得第一个表或者第一行，可以用->first()。

$reader->first();

注：根据设置'force_sheets_collection'的不同，将返回第一行或者第一个表。

  工作薄和表的标题

 用->getTitle()检索工作薄和表的标题。

// Get workbook title
$workbookTitle = $reader->getTitle();

foreach($reader as $sheet)
{
    // get sheet title
    $sheetTitle = $sheet->getTitle();
}

  限制结果

 抓取行

 当你只想返回一个表里的X行时，用->take() 或者  ->limit()。

// You can either use ->take()
$reader->take(10);

// Or ->limit()
$reader->limit(10);

 跳过行

 当你想跳过一定数量的行，可以用->skip() 或者  ->limit(false, 10)。

// Skip 10 results
$reader->skip(10);

// Skip 10 results with limit, but return all other rows
$reader->limit(false, 10);

// Skip and take
$reader->skip(10)->take(10);

// Limit with skip and take
$reader->($skip, $take);

   修改结果

 当你想返回一个数组而不是一个对象时，可以用->toArray()。

$reader->toArray();

 当你想返回一个对象，可以选择（代替get() 或者 all()）用->toObject()。

$reader->toObject();

   显示结果

 可以将结果转储到可读输出，使用->dump() 或者  ->dd()。

// Dump the results
$reader->dump();

// Dump results and die
$reader->dd();

 迭代结果

 可以用->each()迭代结果。

// Loop through all sheets
$reader->each(function($sheet) {

    // Loop through all rows
    $sheet->each(function($row) {

    });

});

另外，也可以用foreach迭代结果。

选择表和列

 选择一个指定表

 如果你想选择单个表，可以用->selectSheets($name)，仅仅这个表被载入。

Excel::selectSheets('sheet1')->load();

 选择多个表

 如果你想选择文件里的多个表，通过在参数里传入一个数组。

Excel::selectSheets('sheet1', 'sheet2')->load();

用索引选择表

// First sheet
Excel::selectSheetsByIndex(0)->load();

// First and second sheet
Excel::selectSheetsByIndex(0, 1)->load();

 选择列

 如果只想选择一部分列，可以用->select($columns)或者传入一个数组到->get($columns)的第一个参数。

// Select
$reader->select(array('firstname', 'lastname'))->get();

// Or
$reader->get(array('firstname', 'lastname'));

全部 get 方法 (像 all(), first(), dump(), toArray(), ...)接受一个列的数组。

日期

 日期默认被解析为一个Carbon object，可以在import.php里设置dates.enabled 为 false禁用日期格式化编译。

启用/禁用单一导入的日期格式，用->formatDates($boolean, $format)

// Format the dates
$reader->formatDates(true);

// Disable date formatting
$reader->formatDates(false);

// Format dates + set date format
$reader->formatDates(true, 'Y-m-d');

 格式化日期

 默认状态日期不格式化，但返回一个Carbon对象，这里有一些选项格式化他们。

 在->get()后格式化结果

 在循环中，你可以利用Carbon方法->format($dateFormat)

$rows->each(function($row) {

    $created_at = $row->created_at->format('Y-m-d');

});

 设置一个默认日期格式

$reader->setDateFormat('Y-m-d');

 设置自定义日期列

 没有日期格式的单元格将不被解析为日期。强迫这种行为（或者用CSV导入）您可以手动设置这些日期列：->setDateColumns()

$reader->setDateColumns(array(
    'created_at',
    'deleted_at'
))->get();

计算公式

 默认文件里的公式将被计算且返回结果，在import.php里设置calculate改变默认行为以达到理想状态。

 如果您想启用/禁用它为一个单一的导入，可以用->calculate($boolean)

// Enable calculation
$reader->calculate();

// Disable calculation
$reader->calculate(false);

自定认格式化值

 默认 Excel使用PHPExcel的默认值来智能格式化的单元格值。你可以重写以取代这种行为的粘合，以满足特定需求。值粘合必须有PHPExcel_Cell_IValueBinder和一个bindValue方法。也可以扩展PHPExcel_Cell_DefaultValueBinder返回默认行为。

use PHPExcel_Cell;
use PHPExcel_Cell_DataType;
use PHPExcel_Cell_IValueBinder;
use PHPExcel_Cell_DefaultValueBinder;

class MyValueBinder extends PHPExcel_Cell_DefaultValueBinder implements PHPExcel_Cell_IValueBinder
{
    public function bindValue(PHPExcel_Cell $cell, $value = null)
    {
        if (is_numeric($value))
        {
            $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_NUMERIC);

            return true;
        }

        // else return default behavior
        return parent::bindValue($cell, $value);
    }
}

$myValueBinder = new MyValueBinder;

Excel::setValueBinder($myValueBinder)->load('file.xls', function($reader) {

    // reader methods

});

 PHPExcel_Cell_DataType 可用 TYPE_STRING, TYPE_FORMULA, TYPE_NUMERIC, TYPE_BOOL, TYPE_NULL, TYPE_INLINE 和 TYPE_ERROR。

重置默认的值或者调用Laravel Excel前设置一个自定义粘合，需要调用resetValueBinder方法。

1

Excel::resetValueBinder();

缓存和单元格缓存

 单元格缓存

 可以配置cache.php开启单元格缓存，可以在两个动动之间选择和设置，默认开启memory驱动。

 记住结果

 可以用->remember($minutes)记住结果，下次载入相同的文件（如果它仍然在缓存里），将返回缓存结果。

// Remember for 10 minutes
$results = $reader->remember(10)->get();

导入块

 处理大文件时，最好导入一大块数据，可以用filter('chunk')开启，要导入块可以用chunk($size, $callback)代替正常的get()。第一个参数是块的尺寸，第二个参数是一个闭包将返回结果。

Excel::filter('chunk')->load('file.csv')->chunk(250, function($results)
{
        foreach($results as $row)
        {
            // do stuff
        }
});

批量导入

 导入一个文件夹

 要导入整个文件夹（仅仅xls, xlsx 和 csv文件会被导入），第一个参数设置为文件夹。

Excel::batch('app/storage/uploads', function($rows, $file) {

    // Explain the reader how it should interpret each row,
    // for every file inside the batch
    $rows->each(function($row) {

        // Example: dump the firstname
        dd($row->firstname);

    });

});

 导入多个文件

 也可以通过指定一个文件数组导入。

$files = array(
    'file1.xls',
    'file2.xls'
);

Excel::batch($files, function($rows, $file) {

});

 导入一个文件夹和多个表

 当文件包含多个表，还应该循环表

Excel::batch('app/storage/uploads', function($sheets, $file) {

    $sheets->each(function($sheet) {

    });

});

导入设置

 当使用高组Excel文件（如，没有任何表头列），这些导入可能比较复杂，->byConfig()将帮助你处理这些问题。

 在excel::import.sheets里设置的例子：

Excel::load('file.xls')->byConfig('excel::import.sheets', function($sheet) {

    // The firstname getter will correspond with a cell coordinate set inside the config
    $firstname = $sheet->firstname;

});

注意：如果你用多个表，->byConfig将循环通过所有表，如果getters仅存在其中一个表，可以一直用->selectSheets()。

编辑现有文件

 你可以编辑现有Excel文件，载入然后改性导出它们。

Excel::load('file.csv', function($file) {

    // modify stuff

})->export('csv');

转换

 从一个文件类型转换到另一个文件类型用->convert()

Excel::load('file.csv', function($file) {

    // modify stuff

})->convert('xls');

其他

 禁止使用第一行作为集合属性

 默认用文件的第一行作为表头（因此，作为集合的属性名称），可以通过import.php里的import.heading改变。

 在单个导入里用->noHeading()

$reader->noHeading();

设置单元格名称分隔符

 通过在第一行列中查找默认集合属性名称，分隔翻译为：_。

 例如：Created at -> created_at

 改变import.php里的'separator'改变默认行为，或者可以用->setSeparator($separator)。

$reader->setSeparator('-');

 忽略空单元格

默认没有忽略空单元格，作为空的单元格集合

要改变这个默认行为，改变import.php里的'ignoreEmpty'或者用->ignoreEmpty()。

$reader->ignoreEmpty();

输入编码

在import.php里设置改变输入编码，大多数情况下UTF-8是最好的选择，当然如果你要确认输出结果是和HTML页面原编码是一致的。
可以在->load()里传入输入编码

// When utilising a closure, you can pass the input encoding as third parameter.
Excel::load('filename.csv', function($reader) {

}, 'UTF-8');

// or without a closure, you can use it as second parameter.
Excel::load('filename.csv', 'UTF-8');

CSV设置

在csv.php文件里，可以修改默认设置，像delimiter,  enclosure 和 line_ending。

##############################################################################

简单导出Excel

 基础

 用create方法设置第一个参数是文件名可以创建一个新文件。

Excel::create('Filename');

 要操作创建的文件可以用回调函数。

Excel::create('Filename', function($excel) {

    // Call writer methods here

});

 改变属性

 一些属性可以在内置闭包里改变，大多数值是默认设置的，查看 app/config/packages/maatwebsite/excel/config.php。

Excel::create('Filename', function($excel) {

    // Set the title
    $excel->setTitle('Our new awesome title');

    // Chain the setters
    $excel->setCreator('Maatwebsite')
          ->setCompany('Maatwebsite');

    // Call them separately
    $excel->setDescription('A demonstration to change the file properties');

});

自己去参考指南看到可用属性的列表。

导出

 下载生成的文件，用->export($ext) 或者 ->download($ext)

 导出Excel5 (xls)

Excel::create('Filename', function($excel) {

})->export('xls');

// or
->download('xls');

 导出Excel2007 (xlsx)

->export('xlsx');

// or
->download('xlsx');

 导出CSV

->export('csv');

// or
->download('csv');

可以在配置里设置默认外壳和分隔符。

 导出PDF

 要导出PDF，要在composer.json里包含"dompdf/dompdf": "~0.6.1", "mpdf/mpdf": "~5.7.3" 或者 "tecnick.com/tcpdf": "~6.0.0"，修改export.pdf.driver相应的设置。

1

->export('pdf');

新Excel文件注入

 自Laravel 5.0后这是个新颖的表单请求注入，这里介绍新Excel文件注入。

 新Excel文件类

 这个新Excel文件是一个新的Excel文件，在getFilename()里可以声明想要的文件名。

class UserListExport extends \Maatwebsite\Excel\Files\NewExcelFile {

    public function getFilename()
    {
        return 'filename';
    }
}

 使用

 可以在__constructor或者方法里注入新Excel文件（使用Laravel 5.0），如这个控制器：

class ExampleController extends Controller {

    public function exportUserList(UserListExport $export)
    {
        // work on the export
        return $export->sheet('sheetName', function($sheet)
        {

        })->export('xls');
    }

}

 导出处理

 要完全从控制器解耦Excel导出代码，可以用导出处理，

class ExampleController extends Controller {

    public function exportUserList(UserListExport $export)
    {
        // Handle the export
        $export->handleExport();
    }

}

 handleExport()方法会动态调用一个处理类，当类名添加Handler时：

class UserListExportHandler implements \Maatwebsite\Excel\Files\ExportHandler {

    public function handle(UserListExport $export)
    {
        // work on the export
        return $export->sheet('sheetName', function($sheet)
        {

        })->export('xls');
    }

}

数据集在服务器

 用服务器的数据集生成文件，使用 ->store($ext, $path = false, $returnInfo = false) 或者 ->save()。

 正常导出到默认存储路径

 默认文件会存储到app/storage/exports文件夹，定义在export.php配置文件。

Excel::create('Filename', function($excel) {

    // Set sheets

})->store('xls');

  正常导出到自定义存储路径

 如果想使用自定义存储路径（例如每个客户单独的文件），可以在第二个参数设置文件夹，

1

->store('xls', storage_path('excel/exports'));

 存储和导出

1

->store('xls')->export('xls');

 存储和返回存储信息

 如果想返回存储信息，设置第三个参数为true，或者在配置export.php里改变。

1

->store('xls', false, true);

    Key 解释
    full 完整路径和文件名
    path 不包含文件名的路径
    file 文件名
    title 文件标题
    ext 文件扩展名

确保存储文件夹可写。

表

 生成一个表

 在我们新创建的文件里生成一个表，用->sheet('Sheetname')。

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        // Sheet manipulation

    });

})->export('xls');

 生成多个表

 要在文件里设置多个表。

Excel::create('Filename', function($excel) {

    // Our first sheet
    $excel->sheet('First sheet', function($sheet) {

    });

    // Our second sheet
    $excel->sheet('Second sheet', function($sheet) {

    });

})->export('xls');

 修改属性

 里面有几个属性我们可以改变，他们中的大多数有默认的配置值。查看 app/config/packages/maatwebsite/excel/config.php。

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        $sheet->setOrientation('landscape');

    });

})->export('xls');

自己去参考指南看到可用属性的列表。

 默认页边距

 可以设置默认页面边缘内的配置文件excel::export.sheets。它接受布尔、单值或数组。

 可以使用手动设置页面：->setPageMargin()

// Set top, right, bottom, left
$sheet->setPageMargin(array(
    0.25, 0.30, 0.25, 0.30
));

// Set all margins
$sheet->setPageMargin(0.25);

 密码保护表

 表可以用$sheet->protect()设置密码保护：

// Default protect
$sheet->protect('password');

// Advanced protect
$sheet->protect('password', function(\PHPExcel_Worksheet_Protection $protection) {
    $protection->setSort(true);
});

从一个数组生成表

 数组

 从一个数组生成新文件用：->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)表内闭包：

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        $sheet->fromArray(array(
            array('data1', 'data2'),
            array('data3', 'data4')
        ));

    });

})->export('xls');

 另外可以用：->with()

$sheet->with(array(
    array('data1', 'data2'),
    array('data3', 'data4')
));

 如果想传递属性到闭包，用use($data)

$data = array(
    array('data1', 'data2'),
    array('data3', 'data4')
);

Excel::create('Filename', function($excel) use($data) {

    $excel->sheet('Sheetname', function($sheet) use($data) {

        $sheet->fromArray($data);

    });

})->export('xls');

 空比较

 默认0显示为空单元格，如果要改变，传递true到第4个参数：

// Will show 0 as 0
$sheet->fromArray($data, null, 'A1', true);

要改变默认行为，可以用excel::export.sheets.strictNullComparison设置。

Eloquent模型
它也可以传递一个Eloquent模型且导出用->fromModel($model)。与fromArray方法一样接受相同的参数。

自动生成表头

默认导出用数组的键（或者模型属性名）作为第一行（表头列）。要改变可以编辑默认配置（excel::export.generate_heading_by_indices）或者传递false到第5个参数。

// Won't auto generate heading columns
$sheet->fromArray($data, null, 'A1', false, false);

处理（操作）行

 处理部分行

 改变单元格值

// Manipulate first row
$sheet->row(1, array(
     'test1', 'test2'
));

// Manipulate 2nd row
$sheet->row(2, array(
    'test3', 'test4'
));

 处理一行单元格

// 设置黑色背景
$sheet->row(1, function($row) {

    // 设用单元格处理方法
    $row->setBackground('#000000');

});

 插入行

// 在第2行后插入
$sheet->appendRow(2, array(
    'appended', 'appended'
));

// 插入最后
$sheet->appendRow(array(
    'appended', 'appended'
));

 添加一行

// 添加到第1行前
$sheet->prependRow(1, array(
    'prepended', 'prepended'
));

// 添加到最前面
$sheet->prependRow(array(
    'prepended', 'prepended'
));

添加多行

// 添加多行
$sheet->rows(array(
    array('test1', 'test2'),
    array('test3', 'test4')
));

// 添加多行
$sheet->rows(array(
    array('test5', 'test6'),
    array('test7', 'test8')
));

处理（操作）单元格

$sheet->cell('A1', function($cell) {

    // manipulate the cell

});

$sheet->cells('A1:A5', function($cells) {

    // manipulate the range of cells

});

 设置背景

 改变单元格背景用：->setBackground($color, $type, $colorType)

// 设置黑色背景
$cells->setBackground('#000000');

 改变字体
/ Set with font color
$cells->setFontColor('#ffffff');

// Set font family
$cells->setFontFamily('Calibri');

// Set font size
$cells->setFontSize(16);

// Set font weight to bold
$cells->setFontWeight('bold');

// Set font
$cells->setFont(array(
    'family'     => 'Calibri',
    'size'       => '16',
    'bold'       =>  true
));

 设置边框

// Set all borders (top, right, bottom, left)
$cells->setBorder('solid', 'none', 'none', 'solid');

// Set borders with array
$cells->setBorder(array(
    'borders' => array(
        'top'   => array(
            'style' => 'solid'
        ),
    )
));

 设置水平对齐

// Set alignment to center
$cells->setAlignment('center');

 设置垂直对齐

// Set vertical alignment to middle
 $cells->setValignment('middle');

表格样式

 如果你想要改变的一般样式表（不是特定的单元格或范围），用->setStyle()方法：

// Set font with ->setStyle()`
$sheet->setStyle(array(
    'font' => array(
        'name'      =>  'Calibri',
        'size'      =>  15,
        'bold'      =>  true
    )
));

 字体

要改变当前表的字体用：->setFont($array)

$sheet->setFont(array(
    'family'     => 'Calibri',
    'size'       => '15',
    'bold'       => true
));

 分开设置

// Font family
$sheet->setFontFamily('Comic Sans MS');

// Font size
$sheet->setFontSize(15);

// Font bold
$sheet->setFontBold(true);

 边框

 设置表边框，用：

// 设置所有边框
$sheet->setAllBorders('thin');

// 设置单元格边框
$sheet->setBorder('A1', 'thin');

// 指定范围边框
$sheet->setBorder('A1:F10', 'thin');

自己去参考指南看到可用边框样式的列表。

冻结行

 如果想冻结一个单元格，行或者列，用：

// Freeze first row
$sheet->freezeFirstRow();

// Freeze the first column
$sheet->freezeFirstColumn();

// Freeze the first row and column
$sheet->freezeFirstRowAndColumn();

// Set freeze
$sheet->setFreeze('A2');

自动过滤

 开启自动过滤用：->setAutoFilter($range = false)

// Auto filter for entire sheet
$sheet->setAutoFilter();

// Set auto filter for a range
$sheet->setAutoFilter('A1:E10');

单元格尺寸
 设置列宽
 要设置列宽用：->setWidth($cell, $width)

// Set width for a single column
$sheet->setWidth('A', 5);

// Set width for multiple cells
$sheet->setWidth(array(
    'A'     =>  5,
    'B'     =>  10
));

 设置行高

 设置行高：->setHeight($row, $height)

// Set height for a single row
$sheet->setHeight(1, 50);

// Set height for multiple rows
$sheet->setHeight(array(
    1     =>  50,
    2     =>  25
));

 设置单元格尺寸

 设置单元格尺寸用：->setSize($cell, $width, $height)

// Set size for a single cell
$sheet->setSize('A1', 500, 50);

$sheet->setSize(array(
    'A1' => array(
        'width'     => 50
        'height'    => 500,
    )
));

自动大小

 默认情况下导出的文件被自动设置大小，要改变这种行为可以改变配置或使用setter

// Set auto size for sheet
$sheet->setAutoSize(true);

// Disable auto size for sheet
$sheet->setAutoSize(false);

// Disable auto size for columns
$sheet->setAutoSize(array(
    'A', 'C'
));

默认配置设置在：export.php。

列合并
 合并单元格
 要合并单元格，用->mergeCells($range)

$sheet->mergeCells('A1:E1');

 合并列和行

 合并列和行用：->setMergeColumn($array)

$sheet->setMergeColumn(array(
    'columns' => array('A','B','C','D'),
    'rows' => array(
        array(2,3),
        array(5,11),
    )
));

列格式化

 要告诉Excel它应该如何解释某些列，可以用->setColumnFormat($array)

// Format column as percentage
$sheet->setColumnFormat(array(
    'C' => '0%'
));

// Format a range with e.g. leading zeros
$sheet->setColumnFormat(array(
    'A2:K2' => '0000'
));

// Set multiple column formats
$sheet->setColumnFormat(array(
    'B' => '0',
    'D' => '0.00',
    'F' => '@',
    'F' => 'yyyy-mm-dd',
));

自己去参考指南看可用于列格式化的列表。

设用PHPExcel的本地方法

 可以在$excel 和 $sheet对象调用所有PHPExcel的本地方法。

 调用工作薄方法

例子：

// 获得工作薄默认风格
$excel->getDefaultStyle();

调用工作表方法

例子：

// 保护单元格
$sheet->protectCells('A1', $password);
```

###  Health Score

28

—

LowBetter than 52% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

4

Last Release

3420d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/8287270?v=4)[wangjia](/maintainers/wangjia5693)[@wangjia5693](https://github.com/wangjia5693)

---

Top Contributors

[![wangjia5693](https://avatars.githubusercontent.com/u/8287270?v=4)](https://github.com/wangjia5693 "wangjia5693 (6 commits)")

---

Tags

exportexcelcsvimportbatchPHPExcel

### Embed Badge

![Health badge](/badges/wj-excel/health.svg)

```
[![Health](https://phpackages.com/badges/wj-excel/health.svg)](https://phpackages.com/packages/wj-excel)
```

###  Alternatives

[maatwebsite/excel

Supercharged Excel exports and imports in Laravel

12.9k157.3M894](/packages/maatwebsite-excel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
