我正在使用Kartik的ExportMenu小部件在Yii2中导出数据。
导出xls时,我可以看到行但没有图像,图像通过<img>
标签显示,并且图像在上载目录之一中。
这是我的桌子的样子:
这就是编写导出代码的方式:
echo \kartik\export\ExportMenu::widget([
'dataProvider' => $dataProvider,
'columns' =>$exportColumns
]);
答案 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,
]);
对象一起使用),并保证对导出图像的本机支持(如果需要更新,则需要维护该类)。
结果