美文网首页
composer插件之----Box\Spout\Reader导

composer插件之----Box\Spout\Reader导

作者: 安晓生 | 来源:发表于2019-10-09 19:24 被阅读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;
    }
    

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

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

    相关文章

      网友评论

          本文标题:composer插件之----Box\Spout\Reader导

          本文链接:https://www.haomeiwen.com/subject/dbzgpctx.html