草庐IT

php - Laravel Excel,从模型导出,样式问题

coder 2024-01-02 原文

我正在尝试使用“Laravel excel”将一些数据从我的模型导出到 excel scheet,我已经做到了,但是我的结果与我真正需要的相去甚远

这就是我在下载文件中得到的:

这就是我真正想要完成的:

我的 Controller 部分:

//casting export...
        Excel::create('ExcelExport', function($excel) use($filters, $agents) {

            $main_arr = array();

            foreach($agents as $value){                 
                $main_arr[] = Card::cardForUser($value, $filters)->toArray();                   
            }

            $excel->sheet('Sheetshit', function($sheet) use($main_arr) {
                //You may ask me "why are you using foreach?"
                // and my answer will be:"I don`t KNOW, because it WORKS!"

                foreach($main_arr as $one){
                    $sheet->fromArray($one);
                }

            });

        })->export('xls');

模型部分:

public static  function  cardForUser($user_id, $filters = array()){
        $query = static::UserId($user_id);//just gets 'where user id'

        foreach($filters['fields'] as $select){
            $query->addSelect($select);
        }
            return $query->get();
    }    

    public function scopeUserId($query, $user_id) {
        return $query->where('user_id', '=', $user_id);

    }

$filters 数组由数据库中的字段名称组成,因此它基本上决定了哪些列包含在导出中。这意味着我的 $main_arr 的内部字段长度可能从 1 到 5。每个代理在 DB 中可以有很多行或根本没有

设置了 4 个过滤器的 $main_arr 转储示例:

 array (size=8)
  0 => 
    array (size=10)

//thats will be first agent
          0 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chrysler' (length=8)
              'ts_model' => string 'PT CRUISER' (length=10)
          1 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Opel' (length=4)
              'ts_model' => string 'Corsa' (length=5)
          2 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Dodge' (length=5)
              'ts_model' => string 'Stratus' (length=7)
          3 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Р’РђР—' (length=6)
              'ts_model' => string '2112' (length=4)
          4 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Mercedes-Benz' (length=13)
              'ts_model' => string 'E 270' (length=5)
          5 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Р’РђР—' (length=6)
              'ts_model' => string '21140 LADA SAMARA' (length=17)
          6 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'LADA' (length=4)
              'ts_model' => string '213100 LADA 4С…4' (length=16)
          7 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Р’РђР—' (length=6)
              'ts_model' => string '21110' (length=5)
          8 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chevrolet' (length=9)
              'ts_model' => string 'Lanos' (length=5)
          9 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'VOLKSWAGEN' (length=10)
              'ts_model' => string 'PASSAT' (length=6)
//thats will be second agent
      1 => 
        array (size=10)
          0 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Mercedes' (length=8)
              'ts_model' => string 'Benz' (length=4)
          1 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chevrolet' (length=9)
              'ts_model' => string 'Corvette' (length=8)
          2 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chevrolet' (length=9)
              'ts_model' => string 'Corvette' (length=8)
          3 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chevrolet' (length=9)
              'ts_model' => string 'Corvette' (length=8)
          4 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chevrolet' (length=9)
              'ts_model' => string 'Corvette' (length=8)
          5 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Chevrolet' (length=9)
              'ts_model' => string 'Corvette' (length=8)
          6 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Mazeratti' (length=9)
              'ts_model' => string 'M4' (length=2)
          7 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Ferrari' (length=7)
              'ts_model' => string 'F4' (length=2)
          8 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Mazda' (length=5)
              'ts_model' => string '5' (length=1)
          9 => 
            array (size=4)
              'date_start' => string '06.08.2014 10:00:00' (length=19)
              'ts_category' => int 2
              'ts_make' => string 'Test' (length=4)
              'ts_model' => string 'Test' (length=4)
        etc...

Sooo...我的问题是:

  1. 如何设置主标题(示例 img 中的“Header stuff”)?
  2. 为什么我的列标题(date_start、ts_category、ts_make、ts_model)在第一个数组元素中消失了? (您可以在第一个 img 中看到我没有第一个子数组的“日期开始”和“ts_category”标题。顺便说一句,有时我根本没有第一个子数组的标题!)
  3. 我可以将子数组的标题设为粗体(ts_make 等)吗?怎么样?
  4. 如何为每个代理制作副标题(我打算使用子数组键显示多个代理)?

更新 发布工作代码作为答案。

最佳答案

我不会回答您所有的问题,因为您需要自己查看文档。但是我会告诉你如何获得这样的效果:

我认为这比解释你做错了什么对你更有帮助

上述excel文件的代码如下:

Excel::create('ExcelExport', function ($excel) {

    $excel->sheet('Sheetname', function ($sheet) {

        // first row styling and writing content
        $sheet->mergeCells('A1:W1');
        $sheet->row(1, function ($row) {
            $row->setFontFamily('Comic Sans MS');
            $row->setFontSize(30);
        });

        $sheet->row(1, array('Some big header here'));

        // second row styling and writing content
        $sheet->row(2, function ($row) {

            // call cell manipulation methods
            $row->setFontFamily('Comic Sans MS');
            $row->setFontSize(15);
            $row->setFontWeight('bold');

        });

        $sheet->row(2, array('Something else here'));

        // getting data to display - in my case only one record
        $users = User::get()->toArray();

        // setting column names for data - you can of course set it manually
        $sheet->appendRow(array_keys($users[0])); // column names

        // getting last row number (the one we already filled and setting it to bold
        $sheet->row($sheet->getHighestRow(), function ($row) {
            $row->setFontWeight('bold');
        });

        // putting users data as next rows
        foreach ($users as $user) {
            $sheet->appendRow($user);
        }
    });

})->export('xls');

关于php - Laravel Excel,从模型导出,样式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25998397/

有关php - Laravel Excel,从模型导出,样式问题的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

  6. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  7. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  8. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  9. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  10. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

随机推荐