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;
}

如果大家有好的写法,可以进行评论,我随时更改。

导入的 使用方法我会进行更新。

上一篇下一篇

猜你喜欢

热点阅读