php - 搜索数据库后在电子表格中生成边框时出现致命错误
问题描述
我对电子表格真的很陌生,我构建了整个表格并设法在数据库中搜索项目,但是,我必须将边界放在数据库中搜索的项目行上,因为我不知道有多少产品线有,我用下面的代码:
错误 =
致命错误:第 1262 行 /home2/eekrep60/public_html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php 中允许的内存大小为 268435456 字节已用尽(尝试分配 4096 字节)
ini_set('memory_limit', -1);
ini_set("max_execution_time", 0);
我尝试使用这 2 个命令,但是在使用它们时,服务器在 3 分钟后出现错误,没有边框,它会在 5 秒内生成电子表格
代码...
'<?php
require_once('../../vendor/autoload.php');
include("../includes/db.php");
//ini_set('memory_limit', -1);
//ini_set("max_execution_time", 0);
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Xls;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Style\Style;
use PhpOffice\PhpSpreadsheet\Worksheet\Iterator;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf;
$id_pedido = $_GET['id'];
$pedido = query("SELECT * FROM pedidos WHERE id = ".$id_pedido);
if (!empty($pedido)) {
$pedido = $pedido[0];
$data = explode(' ', $pedido['data']);
$data = explode('-', $data[0]);
$pedido['data'] = $data[2]."/".$data[1]."/".$data[0];
$desconto_categoria = query("SELECT mensagem_carrinho FROM categorias_subcat WHERE id = ".$pedido['empresa']);
$itens = query("SELECT * FROM pedidos_itens WHERE id_pedido = ".$pedido['id']);
$cliente = query("SELECT c.*, ci.dsc_cidade, e.dsc_estado FROM clientes c LEFT JOIN estados e ON (e.id_estado = c.estado) LEFT JOIN cidades ci ON (ci.id_cidade = c.cidade) WHERE c.id = ".$pedido['id_cliente']);
$cliente = $cliente[0];
}
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->getPageSetup()->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_PORTRAIT);
$sheet->getPageSetup()->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4);
$sheet->getPageMargins()->setTop(0.40);
$sheet->getPageMargins()->setRight(0.40);
$sheet->getPageMargins()->setLeft(0.40);
$sheet->getPageMargins()->setBottom(0.40);
$sheet->getPageMargins()->setHeader(0.0);
$sheet->getPageMargins()->setFooter(0.0);
$sheet->getColumnDimension('A')->setWidth(13,5);
$sheet->getColumnDimension('B')->setWidth(47,5);
$sheet->getColumnDimension('C')->setWidth(5);
$sheet->getColumnDimension('D')->setWidth(6);
$sheet->getColumnDimension('E')->setWidth(10);
$sheet->getColumnDimension('F')->setWidth(13);
$styleArray1 = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
],
];
$styleArray2 = [
'borders' => [
'top' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
'left' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
'right' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
],
];
$styleArray3 = [
'borders' => [
'bottom' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
'left' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
'right' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
],
];
$styleArray4 = [
'borders' => [
'left' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
],
];
$styleArray5 = [
'borders' => [
'right' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '00000000'],
],
],
];
$sheet->mergeCells('A19:F19')->getRowDimension('19')->setRowHeight(3);
$sheet->getStyle('A19:F19')->applyFromArray($styleArray1);
$sheet->getStyle('A20:F20')->applyFromArray($styleArray1);
$sheet->setCellValue('A20', "REFERÊNCIA")->getstyle('A20')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getstyle('A20')->getFont()->setBold(true);
$sheet->setCellValue('B20', "DESCRIÇÃO DO PRODUTO")->getstyle('B20')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getstyle('B20')->getFont()->setBold(true);
$sheet->setCellValue('C20', "Q.CX")->getstyle('C20')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getstyle('C20')->getFont()->setBold(true);
$sheet->setCellValue('D20', "Q.UN")->getstyle('D20')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getstyle('D20')->getFont()->setBold(true);
$sheet->setCellValue('E20', "V.UNIT")->getstyle('E20')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getstyle('E20')->getFont()->setBold(true);
$sheet->setCellValue('F20', "TOTAL")->getstyle('F20')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getstyle('F20')->getFont()->setBold(true);
$i=21;
foreach($itens as $item):
//$sheet->getStyle('A:F')->applyFromArray($styleArray1);**//HERE ERROR OCCURS****
$sheet->getStyle('A:F')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle('E:F')->getNumberFormat()->setFormatCode('$ #,##0.00');
$qCaixa = query("SELECT quantidade_caixa FROM produtos WHERE cod = '".$item['item_codigo']."'");
$sheet->setCellValue('A'.$i, $item['item_codigo']);
$sheet->setCellValue('B'.$i, $item['item_nome']);
$sheet->setCellValue('C'.$i, $item['item_quantidade']);
$sheet->setCellValue('D'.$i, $qCaixa[0]['quantidade_caixa']);
$sheet->setCellValue('E'.$i, $item['item_valor']);
$sheet->setCellValue('F'.$i, $item['valor_total']);
$i++;
endforeach;
$sheet->getRowDimension($i)->setRowHeight(26);
$sheet->getStyle('A'.$i.':F'.$i)->applyFromArray($styleArray1);
$sheet->mergeCells('A'.$i.':D'.$i)->setCellValue('A'.$i, 'TOTALR$');
$sheet->getstyle('A'.$i)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT);;
$sheet->getstyle('A'.$i)->getFont()->setSize(16);
$sheet->getstyle('A'.$i)->getFont()->setBold(true);
$sheet->getStyle('E'.$i)->getNumberFormat()->setFormatCode('R$ #,##0.00');
$sheet->mergeCells('E'.$i.':F'.$i)->setCellValue('E'.$i, $pedido['valor_total']);
$sheet->getstyle('E'.$i)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER)->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);;
$sheet->getstyle('E'.$i)->getFont()->setSize(16);
$sheet->getstyle('E'.$i)->getFont()->setBold(true);
$filename = ''.utf8_decode($cliente['razao']).'.xlsx';
// Redirect output to a client's web browser (Xlsx)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');'
解决方案
我发现了问题,我只是将单元格标记为接收带有 $ i 值的边框并且它有效
$sheet->getStyle('A'.$i.':F'.$i)->applyFromArray($styleArray1);
推荐阅读
- flutter - 飞镖是如何设置的
比较项目? - amazon-web-services - 使用 AWS SAM 时无法测试引用 DynamoDB 表的本地 Lambda
- ios - 如何使用 .endReceivingRemoteControlEvents 结束远程指挥中心?
- html - HTML 5 标头元素 ANDI 可访问性问题,如何删除地标功能
- ios - 无法从 Scryfall 解析 json
- node.js - Nodejs - 返回列表的子集,以便它们包含另一个列表中的值
- discord.js - 连接读取未定义的“发送”
- c# - 如何使用预定义的枚举值创建类属性?
- javascript - JS 问题,试图在单词之间添加空格
- angular - 获取 NullInjectorError: No provider for Store 尝试运行 Angular 测试时出现错误