导出带有图像的网格-YII2 gridview小部件

时间:2019-09-24 21:22:37

标签: yii2

我正在使用Kartik的ExportMenu小部件在Yii2中导出数据。

导出xls时,我可以看到行但没有图像,图像通过<img>标签显示,并且图像在上载目录之一中。

enter image description here

这是我的桌子的样子:

enter image description here

这就是编写导出代码的方式:

   echo \kartik\export\ExportMenu::widget([
        'dataProvider' => $dataProvider,
        'columns' =>$exportColumns
    ]);

1 个答案:

答案 0 :(得分:1)

窗口小部件不会直接导出图像,但是会显示GET /wfcharges/_search { "aggs" : { "countfield" : { "terms" : { "field" : "mainid" } } } } 的实例。通过该对象,您可以访问工作表并附加图像。

因此,您可以通过多种方式实现这一目标;最简单,最干净的方法是在小部件配置数组中使用aws-ec2-spot-fleet-tagging-role参数。这接受一个接收以下参数的匿名函数:

Spreadsheet

,并为添加到XLS中的每个单元格调用。

对于每个图像,检查其是否为图像:带有正则表达式,img标签,文件是否存在,扩展名,mime类型等。

使用onRenderDataCell对象,可以将图像添加到特定的单元格中。 下面是一个完整的示例:

function(PhpOffice\PHP\Spreadsheet\Cell $cell, $content, $model, $key, $index, kartik\export\Export\Menu $widget) {   }

或者,您可以扩展$cell类并使用类似的技术(与<?php use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use kartik\export\ExportMenu; use kartik\grid\GridView; use yii\data\ArrayDataProvider; use yii\helpers\Html; // example data $dataProvider = new ArrayDataProvider([ 'allModels' => [ [ 'id' => 1, 'name' => "Mario", 'image' => 'img/mario.jpeg', ], [ 'id' => 2, 'name' => "Luigi", 'image' => 'img/luigi.jpg', ], ] ]); // grid columns $gridColumns = [ 'id', 'name', [ 'attribute' => 'image', 'content' => function($model) { return Html::img($model['image']); }, 'value' => function($model) { return $model['image']; }, 'format' => 'raw' ] ]; // export menu echo ExportMenu::widget([ 'dataProvider' => $dataProvider, 'columns' => $gridColumns, 'onRenderDataCell' => function(PhpOffice\PhpSpreadsheet\Cell\Cell $cell, $content, $model, $key, $index, kartik\export\ExportMenu $widget) { $column = $cell->getColumn(); $columnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($column) - 1; $value = array_values($model)[$columnIndex]; if(file_exists($value)) { // change the condition as you prefer /* @var PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $worksheet */ $firstRow = 2; // skip header row $imageName = "Image name"; // Add a name $imageDescription = "Image description"; // Add a description $padding = 5; $imageWidth = 60; // Image width $imageHeight = 60; // Image height $cellID = $column . ($index + $firstRow); // Get cell identifier $worksheet = $cell->getWorksheet(); $worksheet->getRowDimension($index + $firstRow)->setRowHeight($imageHeight + ($padding * 2)); //$worksheet->getColumnDimension($column)->setAutoSize(false); //$worksheet->getColumnDimension($column)->setWidth($imageWidth + ($padding * 2)); $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setName($imageName); $drawing->setDescription($imageDescription); $drawing->setPath($value); // put your path and image here $drawing->setCoordinates($cellID); //$drawing->setOffsetX(200); $drawing->setWidth($imageWidth); $drawing->setHeight($imageHeight); //$drawing->setWidthAndHeight($imageWidth, $imageHeight); $drawing->setWorksheet($worksheet); } }, 'dropdownOptions' => [ 'label' => 'Export All', 'class' => 'btn btn-secondary' ] ]) . "<hr>\n"; // grid view echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => $gridColumns, ]); 对象一起使用),并保证对导出图像的本机支持(如果需要更新,则需要维护该类)。

结果

Screenshot