Laravel-Excel 3.0: Export Custom Array into Excel

Recently popular package Laravel-Excel released a new version 3.0, which was a pretty radical change from previous versions. I needed to do a simple Excel export and noticed that their documentation covers only export from Laravel Collections but not from some custom structure. So I will show you a “workaround”.

First, this is how documentation describes the basic workflow:

You need to create a separate class for export (similar how Laravel Notifications work) and you can define a collection to export.

There are also other ways to export the data:

From Eloquent query:

Or, from View HTML table:

But still, the problem is that all examples are based on Eloquent. What if I need Excel from some custom structure like array?

Imagine that I have this array:

How do I export that into Excel, so that keys would be columns, and values would be rows?

There are two ways.

Option 1. Turn your Array into a Collection and add Headings

This is how the Export class would look:

You need to implement collection() method by using Laravel’s collect() method and passing array to it. Also, you need to implement headings() to add a header row.

Finally, in Controller you will have this row at the end of the method:

Then you would have this as downloaded result:

laravel excel 3.0 export

Option 2. Pass Array into View

Alternatively, you can build this resources/views/exports/xml.blade.php:

And then have this in your Export class:

Controller stays the same, just different class name:

Wait, but how to pass data into Export class?

Both of our examples have one flaw – the data is formed in the class itself. Actually, it shouldn’t even know about the data, it should accept it as a parameter. But how do we do that, if view() or collection() methods have no parameters?

We will pass it through __construct() method into a private variable. You could call it a dependency injection, although there are much better examples of dependency injection, look it up on Google.

So we’re accepting $data as a parameter now. Then, in our Controller we can have this:

I hope that’s helpful. Check out other examples in official documentation of the package.

Liked the article? Maybe you need help with your Laravel project?
Check out my Upwork profile and hire me!

2 thoughts on “Laravel-Excel 3.0: Export Custom Array into Excel

  1. Very smart notices and hints as we had expected with your Laravel’s articles. However, there is any mention for very large models. i.e suppose a model with more than 2 million records!

  2. Hi, how are you? If you want to add color to the xls cells using xml.blade.php?

    this does not work: NAME or NAME

    any ideas?

Leave a Reply

Your email address will not be published. Required fields are marked *