Como gerar Word com Laravel 10


Neste tutorial, será apresentado como gerar Word com Laravel 10.

Primeiramente, será demonstrado como realizar pesquisas no banco de dados.

Em seguida, será explicado como gerar o arquivo Word com Laravel.

Por fim, será mostrado como forçar o download do arquivo.


Download do código fonte desenvolvido na aula: Download

Curso de Laravel: Mais Detalhes do Curso

Playlist completa sobre Laravel: Acessar

Receber as aulas gratuitas do curso de Laravel: Acessar


Para começar, é utilizado como base o projeto da aula "Como gerar Excel com Laravel 10".

Criada a rota para gerar Word no arquivo "routes/web.php".

Route::get('/gerar-word-conta', [ContaController::class, 'gerarWord'])->name('conta.gerar-word');

Na controller "app/Http/Controllers/ContaController.php", foi criado o método "gerarWord". No mesmo, os registros da tabela "contas" são recuperados do banco de dados, o conteúdo a ser salvo no arquivo é criado, o arquivo é gerado e o download do Word é realizado com o Laravel.

// Gerar Word
public function gerarWord(Request $request)
{

    // Recuperar e pesquisar os registros do banco dados
    $contas = Conta::when($request->has('nome'), function ($whenQuery) use ($request) {
        $whenQuery->where('nome', 'like', '%' . $request->nome . '%');
    })
        ->when($request->filled('data_inicio'), function ($whenQuery) use ($request) {
            $whenQuery->where('vencimento', '>=', \Carbon\Carbon::parse($request->data_inicio)->format('Y-m-d'));
        })
        ->when($request->filled('data_fim'), function ($whenQuery) use ($request) {
            $whenQuery->where('vencimento', '<=', \Carbon\Carbon::parse($request->data_fim)->format('Y-m-d'));
        })
        ->with('situacaoConta')
        ->orderBy('vencimento')
        ->get();

    // Calcular a soma total dos valores
    $totalValor = $contas->sum('valor');

    // Criar uma instância do PhpWord
    $phpWord = new PhpWord();

    // Adicionar conteúdo ao documento
    $section = $phpWord->addSection();

    // Adicionar uma tabela
    $table = $section->addTable();

    // Definir as configurações de borda
    $borderStyle = [
        'borderColor' => '000000',
        'borderSize' => 6,
    ];

    // Adicionar o cabeçalho da tabela
    $table->addRow();
    $table->addCell(2000, $borderStyle)->addText("id");
    $table->addCell(2000, $borderStyle)->addText("Nome");
    $table->addCell(2000, $borderStyle)->addText("Vencimento");
    $table->addCell(2000, $borderStyle)->addText("Situação");
    $table->addCell(2000, $borderStyle)->addText("Valor");

    // Ler os registros recuperados do banco de dados
    foreach ($contas as $conta) {

        // Adicionar a linha da tabela
        $table->addRow();
        $table->addCell(2000, $borderStyle)->addText($conta->id);
        $table->addCell(2000, $borderStyle)->addText($conta->nome);
        $table->addCell(2000, $borderStyle)->addText(Carbon::parse($conta->vencimento)->format('d/m/Y'));
        $table->addCell(2000, $borderStyle)->addText($conta->situacaoConta->nome);
        $table->addCell(2000, $borderStyle)->addText(number_format($conta->valor, 2, ',', '.'));
    }

    // Adicionar o total na tabela
    $table->addRow();
    $table->addCell(2000)->addText('');
    $table->addCell(2000)->addText('');
    $table->addCell(2000)->addText('');
    $table->addCell(2000)->addText('');
    $table->addCell(2000, $borderStyle)->addText(number_format($totalValor, 2, ',', '.'));

    // Criar o nome do arquivo
    $filename = 'relatorio_contas_celke.docx';

    // Obter o caminho completo onde o arquivo gerado pelo PhpWord será salvo
    $savePath = storage_path($filename);

    // Salvar o arquivo
    $phpWord->save($savePath);

    // Forçar o download do arquivo no caminho indicado, após o download remover
    return response()->download($savePath)->deleteFileAfterSend(true);
}

Para finalizar, é criado o botão gerar Word na view "resources/views/contas/index.blade.php".

<a href="{{ url('gerar-word-conta?' . request()->getQueryString()) }}" class="btn btn-primary btn-sm">Gerar Word</a>

Baixar o código-fonte completo do projeto.

Bom, era isso. Espero que o tutorial tenha sido útil!