composer插件之----Box\Spout\Reader导
2019-10-09 本文已影响0人
安晓生
composer require box/spout //下载的插件
最近测试了这个插件,发现最新的插件不支持这样写了。
好多方法都废弃了,下面的这些适合用2.7.3的版本,下面还有3.1的用法。
//2的版本废弃的是注释的。 这个是导出的。
use Box\Spout\Writer\Common\Creator\WriterEntityFactory; // namespace is no longer "Box\Spout\Writer"
...
$writer = WriterEntityFactory::createXLSXWriter(); // replaces WriterFactory::create(Type::XLSX)
$writer = WriterEntityFactory::createCSVWriter(); // replaces WriterFactory::create(Type::CSV)
$writer = WriterEntityFactory::createODSWriter(); // replaces WriterFactory::create(Type::ODS)
Box\Spout\Reader:可以处理大的表格数据。
首先我们在学一下:使用box插件来进行导出。
下面我们写一个HTML的点击按钮。
<a href="{:url('orderlogdoexcel',input())}" class="piliang-btn-style">批量导出</a>
接下来我们开始写PHP的代码。
我们新建一个index的控制器(我是在YII2框架里面写的demo)大家可以根据自己的框架进行编写。
public function orderlogdoexcel()
{
$fileName = 'orderlog.xlsx';//导出文件名
$param = input();
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
header("Content-Disposition: attachment; filename=\"{$filename}\"");
// TODO
// 这里写一些业务逻辑
//你的查询数据,例如:
//$data = Data::find()->where(['status'=>1])->asArray()->all();
//不用进行处理。
//
//addRow 是一维数组 插入一条
//addRows 才是二位数组
WriterFactory::create(Type::XLSX)//这块根据大家的需求进行修改,。可以看底部代码。
->openToBrowser($fileName)
->addRow([
'order_no' => '订单编号',
'username' => '会员编号',
'number' => '数量',
'w_time' => '创建时间',
])
->addRows($data)
->close();
}
这个是box/spout 3.1的用法,,查看源代码进行写的一个方法。大家可以试试。
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\Color;
public function Excel(){
$fileName = 'biaoge.xlsx';//导出文件名
$data = UserCode::find()->select('id,code')->where(['status'=>1])->limit(100)->asArray()->all();//这个是你需要导出的数据
//这个是最新的用法,我指定的excel。如果你不想这样用可以调用这个方法:createWriter('') 参数:
//const CSV = 'csv';
//const XLSX = 'xlsx';
//const ODS = 'ods';
$writer = WriterEntityFactory :: createXLSXWriter ();
//这行代码就是表格的样式,字体大小,颜色,背景颜色,自己看看想要什么颜色,自己追源代码。
$style = ( new StyleBuilder ())->setFontBold()->setFontSize( 12 )->setFontColor( Color :: BLUE )->setShouldWrapText()->setBackgroundColor( Color :: YELLOW )->build ();
//下面这行代码是打开文件的流,坑的地方就是这里,我调用的是下面的方法,是直接下载的,还有有个方法是:openToFile() 这个是直接下载到根目录了,建议不用。
$writer->openToBrowser($fileName);
//表格的头部信息
$row1 = WriterEntityFactory :: createRowFromArray ([ '订单编号' , '会员编号'], $style );
//写入头部信息。
$writer->addRow($row1);
//下面这个是我循环了处理了写入数据,因为addRows 这个目前我没找到怎么用,一直报错。所以暂时这样处理了。如果大家有找到用法,可以评论。
foreach ($data as $row) {
$writer->addRow(WriterEntityFactory::createRowFromArray($row));
}
//这里是释放了,最后必须加上:del;要不程序会给你写带表格乱码。导致打不开。
$writer->close();die;
}
如果大家有好的写法,可以进行评论,我随时更改。
导入的 使用方法我会进行更新。