Como baixar arquivos de planilha usando PhpSpreadsheet IOFactory
Se você estiver trabalhando com arquivos de planilha em PHP, talvez já tenha ouvido falar do PhpSpreadsheet, uma biblioteca que permite ler e escrever vários formatos de arquivo de planilha, como Excel e LibreOffice Calc. Neste artigo, mostraremos como utilizar um de seus recursos, a classe IOFactory, para baixar arquivos de planilhas diretamente no navegador sem salvá-los no servidor.
phpoffice phpspreadsheet iofactory download
O que é PhpSpreadsheet?
Uma breve introdução à biblioteca e seus recursos
PhpSpreadsheet é uma biblioteca escrita em PHP puro que oferece um conjunto de classes que permitem manipular arquivos de planilha programaticamente. É baseado no projeto PHPExcel, que não é mais mantido. Algumas das características do PhpSpreadsheet são:
Leitura e gravação de arquivos de planilhas em vários formatos, como XLSX, XLS, ODS, CSV, HTML e PDF.
Criação e modificação de planilhas, células, intervalos, fórmulas, estilos, gráficos, imagens, comentários e muito mais.
Realização de cálculos e validações em dados de planilhas.
Compatível com recursos avançados, como formatação condicional, filtragem de dados, tabelas dinâmicas, macros, criptografia e assinaturas digitais.
Os formatos de arquivo suportados e como instalá-lo
O PhpSpreadsheet oferece suporte à leitura e gravação dos seguintes formatos de arquivo:
Formatar
Leitor
Escritor
XLSX
Sim
Sim
XLS
Sim
Sim
ODS
Sim
Sim
CSV
Sim
Sim
HTML
Sim
Sim
Não
Sim (com bibliotecas adicionais)
Gnumérico
Sim
Não
Silk (SLK)
Não
Sim (com bibliotecas adicionais)
Planilha XML 2003 (XML)
Não
Não (com bibliotecas adicionais)
Biff 5/8 (BIFF5/BIFF8)
Não (com bibliotecas adicionais)
Não (com bibliotecas adicionais)
Biff 2/3/4 (BIFF2/BIFF3/BIFF4)
Não (com bibliotecas adicionais)
Não (com bibliotecas adicionais)
Para instalar o PhpSpreadsheet, você precisa ter o PHP versão 7.2 ou superior e o Composer, um gerenciador de dependências para PHP.Você pode usar o seguinte comando para instalar o PhpSpreadsheet via Composer:
compositor requer phpoffice/phpspreadsheet
Isso fará o download da versão mais recente do PhpSpreadsheet e suas dependências para a pasta do seu projeto.
O que é IOFactory?
Uma classe que fornece um método de fábrica para criar leitores e escritores
IOFactory é uma classe que pertence ao namespace PhpOffice\PhpSpreadsheet\IOFactory. Ele fornece um método estático chamado createWriter() que usa um objeto de planilha e um formato de arquivo como parâmetros e retorna um objeto de gravação que pode salvar a planilha nesse formato. Da mesma forma, ele fornece outro método estático chamado createReader() que usa um formato de arquivo como parâmetro e retorna um objeto leitor que pode carregar uma planilha desse formato.
As vantagens de usar IOFactory sobre classes específicas
Uma das vantagens de usar IOFactory é que você não precisa saber o nome exato da classe do leitor ou gravador para cada formato de arquivo. Por exemplo, se você deseja salvar uma planilha como um arquivo XLSX, não precisa usar a classe Xlsx diretamente. Você pode apenas usar IOFactory::createWriter($spreadsheet, 'Xlsx') e ele retornará uma instância da classe Xlsx para você. Isso torna seu código mais flexível e fácil de manter.
Outra vantagem de usar o IOFactory é que ele pode detectar automaticamente o formato do arquivo com base na extensão ou no conteúdo do arquivo. Por exemplo, se você deseja carregar uma planilha de um arquivo, não precisa especificar o formato do arquivo. Você pode apenas usar IOFactory::load($filename) e ele retornará um objeto de planilha com os dados do arquivo. Isso torna seu código mais robusto e fácil de usar.
Como baixar arquivos de planilha usando IOFactory?
As etapas para criar um objeto de planilha e preenchê-lo com dados
Para baixar arquivos de planilha usando IOFactory, primeiro você precisa criar um objeto de planilha e preenchê-lo com alguns dados.Você pode usar a classe Spreadsheet do namespace PhpOffice\PhpSpreadsheet\Spreadsheet para criar um novo objeto de planilha. Você pode usar os métodos e propriedades da classe Spreadsheet e suas classes relacionadas, como Worksheet, Cell, Style, etc., para manipular os dados e a aparência da planilha.
Por exemplo, você pode usar o código a seguir para criar uma planilha simples com alguns dados de amostra:
// Cria um novo objeto de planilha $spreadsheet = new Spreadsheet(); // Obtém a planilha ativa $worksheet = $spreadsheet->getActiveSheet(); // Define o título da planilha $worksheet->setTitle('Sample Data'); // Definir alguns valores de célula $worksheet->setCellValue('A1', 'Name'); $planilha->setCellValue('B1', 'Idade'); $planilha->setCellValue('C1', 'Sexo'); $planilha->setCellValue('A2', 'Alice'); $planilha->setCellValue('B2', '25'); $planilha->setCellValue('C2', 'Feminino'); $planilha->setCellValue('A3', 'Bob'); $planilha->setCellValue('B3', '30'); $planilha->setCellValue('C3', 'Masculino'); // Definir alguns estilos de célula $worksheet->getStyle('A1:C1')->getFont()->setBold(true); $planilha->getStyle('A1:C1')->getAlignment()->setHorizontal('center'); $worksheet->getStyle('A2:C3')->getAlignment()->setHorizontal('left');
O trecho de código para definir os cabeçalhos e enviar o arquivo para o navegador
Depois de criar e preencher seu objeto de planilha, você pode usar IOFactory::createWriter() para criar um objeto gravador para o formato de arquivo desejado. Você pode então usar o método save() do objeto Writer para enviar o arquivo para o navegador. No entanto, antes de fazer isso, você precisa definir alguns cabeçalhos para informar ao navegador que você está enviando um arquivo e qual é o nome e o tipo dele. Você também precisa desabilitar qualquer buffer de saída e limpar qualquer saída anterior.
Por exemplo, você pode usar o seguinte código para baixar sua planilha como um arquivo XLSX:
// Cria um objeto gravador para o formato XLSX $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); // Definir os cabeçalhos header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="sample.xlsx"'); header('Cache-Control: max-age=0'); // Desabilita o buffer de saída if (ob_get_level()) ob_end_clean(); // Saída do arquivo para o navegador $ writer->save('php://output');
Os parâmetros e configurações opcionais para personalizar a saída
Dependendo do formato do arquivo e de seus requisitos, você também pode usar alguns parâmetros e configurações opcionais para personalizar a saída de seu arquivo de planilha. Por exemplo, você pode usar as seguintes opções:
Se quiser baixar sua planilha como um arquivo CSV, você pode usar os métodos setDelimiter(), setEnclosure() e setLineEnding() da classe Csv para especificar o delimitador, o invólucro e os caracteres de finalização de linha para seu arquivo CSV.
Se quiser baixar sua planilha como um arquivo PDF, você pode usar o método setFont() da classe Pdf para especificar o nome da fonte para seu arquivo PDF. Você também pode usar os métodos setPaperSize() e setOrientation() da classe Worksheet\PageSetup para especificar o tamanho do papel e a orientação do arquivo PDF.
Se você deseja baixar sua planilha como um arquivo HTML, pode usar o método setEmbedImages() da classe Html para especificar se deseja incorporar imagens em seu arquivo HTML ou não. Você também pode usar o método setUseInlineCss() da classe Html para especificar se deve usar estilos CSS embutidos ou não.
Conclusão
Um resumo dos principais pontos e benefícios do uso do IOFactory
Neste artigo, mostramos como usar IOFactory, uma classe que fornece um método de fábrica para criar leitores e gravadores para vários formatos de arquivo de planilha. Também mostramos como criar um objeto de planilha, preenchê-lo com dados e baixá-lo diretamente no navegador usando o IOFactory. Ao usar o IOFactory, você pode:
Escreva menos código e evite codificar nomes de classe para cada formato de arquivo.
Detecte automaticamente o formato do arquivo com base na extensão ou conteúdo do arquivo.
Personalize a saída de seu arquivo de planilha com parâmetros e configurações opcionais.
Uma chamada à ação e um link para a documentação oficial
Se você quiser aprender mais sobre PhpSpreadsheet e IOFactory, você pode visitar a documentação oficial em .
Esperamos que você tenha gostado deste artigo e o tenha achado útil. Se você tiver alguma dúvida ou feedback, sinta-se à vontade para deixar um comentário abaixo. Codificação feliz!
perguntas frequentes
Como posso ler arquivos de planilha usando IOFactory?
Para ler arquivos de planilha usando IOFactory, você pode usar o método load() de IOFactory com o nome do arquivo como parâmetro. Isso retornará um objeto de planilha com os dados do arquivo. Por exemplo:
// Carrega uma planilha de um arquivo XLSX $spreadsheet = IOFactory::load('sample.xlsx');
Como posso gravar arquivos de planilha em um arquivo local usando IOFactory?
Para gravar arquivos de planilha em um arquivo local usando IOFactory, você pode usar o método save() do objeto gravador com o nome do arquivo como parâmetro. Isso salvará o objeto de planilha nesse arquivo. Por exemplo:
// Salva uma planilha como um arquivo ODS $writer = IOFactory::createWriter($spreadsheet, 'Ods'); $writer->save('sample.ods');
Como posso usar diferentes bibliotecas PDF com IOFactory?
Para usar diferentes bibliotecas de PDF com IOFactory, você precisa instalá-las separadamente e registrá-las com IOFactory usando o método registerWriter(). As bibliotecas PDF suportadas são Dompdf, Mpdf, Tcpdf e Fpdf. Por exemplo:
// Instalar o Dompdf via Composer composer require dompdf/dompdf // Registrar o Dompdf como gravador para o formato PDF IOFactory::registerWriter('Pdf', 'Dompdf');
Como posso renderizar gráficos com IOFactory?
Para renderizar gráficos com IOFactory, você precisa criar objetos de gráfico usando a classe Chart do namespace PhpOffice\PhpSpreadsheet\Chart. Você pode então adicioná-los à sua planilha usando o método addChart() da classe Worksheet. No entanto, nem todos os formatos de arquivo suportam gráficos. Atualmente, apenas os formatos XLSX e PDF suportam gráficos. Por exemplo:
// Cria um objeto gráfico $chart = new Chart( 'Sample Chart', // nome do novo Title('Chart Title'), // título new Legend(Position::RIGHT, null, false), // legenda new PlotArea(new Layout()), // área de plotagem new Bar3D(), // tipo de plotagem new DataSeriesValues('String', 'Sample Data!$A$1:$C$1', null, 3), // x-axis labels [new DataSeriesValues()], // y -axis labels [new DataSeriesValues('Number', 'Sample Data!$A$2:$A$3', null, 2)], // valores de dados [new DataSeriesValues()], // rótulos de dados ); // Adiciona o gráfico à planilha $worksheet->addChart($chart); // Salve a planilha como um arquivo PDF com gráficos $writer = IOFactory::createWriter($spreadsheet, 'Pdf'); $writer->setIncludeCharts(true); $writer->save('amostra.pdf');
Como posso lidar com erros e exceções com IOFactory?
Para lidar com erros e exceções com IOFactory, você precisa usar os blocos try-catch para capturar quaisquer exceções lançadas por IOFactory ou suas classes relacionadas. Você pode então usar o método getMessage() da classe Exception para obter a mensagem de erro e exibi-la ou registrá-la como desejar. Por exemplo:
// Tente carregar uma planilha de um arquivo inválido try $spreadsheet = IOFactory::load('invalid.file'); catch (Exception $e) // Captura a exceção e obtém a mensagem de erro $error = $e->getMessage(); // Exibe a mensagem de erro ou registra como desejar echo "Error: $error";
0517a86e26
Comments