数据导出
<h1>数据导出</h1>
<p>系统默认使用<a href="<a href="https://github.com/jqhph/easy-excel"">https://github.com/jqhph/easy-excel"</a>; target="__blank">Easy Excel</a>作为导出工具,支持导出 <code>csv</code>、 <code>xlsx</code> 和 <code>ods</code> 等格式文件。</p>
<p>使用前必须先安装<a href="<a href="https://github.com/jqhph/easy-excel"">https://github.com/jqhph/easy-excel"</a>; target="__blank">Easy Excel</a>:</p>
<pre><code class="language-bash">composer require dcat/easy-excel</code></pre>
<p>> {tip} 默认不开启导出功能。</p>
<h3>启用导出功能</h3>
<p>启用或禁用导出功能</p>
<pre><code class="language-php">$grid-&gt;export();</code></pre>
<p>禁用 <code>导出所有</code> 选项</p>
<pre><code class="language-php">$grid-&gt;export()-&gt;disableExportAll();</code></pre>
<p>禁用 <code>导出选中行</code> 选项</p>
<pre><code class="language-php">$grid-&gt;export()-&gt;disableExportSelectedRow();</code></pre>
<p>禁用 <code>导出当前页</code> 选项</p>
<pre><code class="language-php">$grid-&gt;export()-&gt;disableExportCurrentPage();</code></pre>
<h3>导出文件类型</h3>
<p>> {tip} 默认导出 <code>xlsx</code> 格式文件。</p>
<pre><code class="language-php">// csv
$grid-&gt;export()-&gt;csv();
// xlsx
$grid-&gt;export()-&gt;xlsx();
// ods
$grid-&gt;export()-&gt;ods();</code></pre>
<h3>设置列标题</h3>
<p>> {tip} 如果设置了标题,那么导出的文件的<strong>列数</strong>与标题的<strong>列数</strong>相同,且列的<strong>排序</strong>也相同。</p>
<pre><code class="language-php">// 只导出 id, name和email 三列数据
$titles = ['id' =&gt; 'ID', 'name' =&gt; '名称', 'email' =&gt; '邮箱'];
$grid-&gt;export($titles);
// 也可以这么使用
$grid-&gt;export()-&gt;titles($titles);</code></pre>
<h3>处理导出数据</h3>
<pre><code class="language-php">$grid-&gt;export()-&gt;rows(function (array $rows) {
foreach ($rows as $index =&gt; &amp;$row) {
$row['name'] = $row['first_name'].' '.$row['last_name'];
}
return $rows;
});</code></pre>
<h3>设置导出文件名</h3>
<pre><code class="language-php">$grid-&gt;export()-&gt;filename('管理员数据');</code></pre>
<p><a name="disable-export-extend"></a></p>
<h2>扩展导出功能</h2>
<p>如果系统内置的导出功能不了自己的需求,可以按照下面的步骤来自定义导出功能</p>
<p>本示例用<a href="https://github.com/Maatwebsite/Laravel-Excel">Laravel-Excel</a>作为excel操作库,当然也可以使用任何其他excel库</p>
<p>首先安装好它:</p>
<pre><code class="language-shell">composer require maatwebsite/excel:~2.1.0
php artisan vendor:publish --provider=&quot;Maatwebsite\Excel\ExcelServiceProvider&quot;</code></pre>
<p>然后新建自定义导出类,比如<code>app/Admin/Extensions/ExcelExpoter.php</code>:</p>
<pre><code class="language-php">&lt;?php
namespace App\Admin\Extensions;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Facades\Excel;
class ExcelExpoter extends AbstractExporter
{
public function export()
{
Excel::create('Filename', function($excel) {
$excel-&gt;sheet('Sheetname', function($sheet) {
// 最多导出10W条数据
// 必须设置maxSize,当否则选择导出所有选项时只能导出默认的20条数据。
$maxSize = 10000;
// 这段逻辑是从表格数据中取出需要导出的字段
$rows = collect($this-&gt;buildData(1, $maxSize))-&gt;map(function ($item) {
return array_only($item, ['id', 'title', 'content', 'rate', 'keywords']);
});
$sheet-&gt;rows($rows);
});
})-&gt;export('xls');
}
}</code></pre>
<p>然后在<code>model-grid</code>中使用这个导出类:</p>
<pre><code class="language-php">
use App\Admin\Extensions\ExcelExpoter;
$grid-&gt;export(new ExcelExpoter());</code></pre>
<p>有关更多<code>Laravel-Excel</code>的使用方法,参考<a href="http://www.maatwebsite.nl/laravel-excel/docs">laravel-excel/docs</a></p>