使用 phpspreadsheet 库将数据从数组写入工作表
Posted
技术标签:
【中文标题】使用 phpspreadsheet 库将数据从数组写入工作表【英文标题】:Write data from array to sheet using phpspreadsheet library 【发布时间】:2018-07-18 19:23:07 【问题描述】:如何使用phpspreadsheet
库从数组创建 excel 工作表列标题?
下面是我正在尝试的代码,但它不起作用:
// $header is an array containing column headers
$header = array("Customer Number", "Customer Name", "Address", "City", "State", "Zip");
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($header, NULL, 'A1');
// redirect output to client browser
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="myfile.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
【问题讨论】:
您的日志文件中是否有任何错误? “不工作”是什么意思?您的代码创建了一个名为“myfile.xlsx”的附件,内容是您的标头数组。 这始终是一个谷歌的想法,让社区知道你做了什么来解决问题。这可能对其他人有所帮助,这就是 *** 的目的。 【参考方案1】:一个更详细的例子
$database = [
[ 'Tree', 'Height', 'Age', 'Yield', 'Profit' ],
[ 'Apple', 18, 20, 14, 105.00 ],
[ 'Pear', 12, 12, 10, 96.00 ],
[ 'Cherry', 13, 14, 9, 105.00 ],
[ 'Apple', 14, 15, 10, 75.00 ],
[ 'Pear', 9, 8, 8, 76.80 ],
[ 'Apple', 8, 9, 6, 45.00 ],
];
$criteria = [
[ 'Tree', 'Height', 'Age', 'Yield', 'Profit', 'Height' ],
[ '="=Apple"', '>10', NULL, NULL, NULL, '<16' ],
[ '="=Pear"', NULL, NULL, NULL, NULL, NULL ],
];
$worksheet->fromArray( $criteria, NULL, 'A1' )
->fromArray( $database, NULL, 'A4' );
$worksheet->setCellValue('A12', '=DCOUNT(A4:E10,"Height",A1:B3)');
$retVal = $worksheet->getCell('A12')->getCalculatedValue();
// $retVal = 3
还有更多很好的例子 https://phpspreadsheet.readthedocs.io/en/latest/topics/calculation-engine/#examples_1
【讨论】:
【参考方案2】:另外,您的 Content-Type 标头有误...
对于 BIFF .xls 文件
application/vnd.ms-excel
对于 Excel2007 及以上的 .xlsx 文件
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
所以,完整的工作代码应该是这样的:
// $header is an array containing column headers
$header = [array("Customer Number", "Customer Name", "Address", "City", "State", "Zip")];
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($header, NULL, 'A1');
// redirect output to client browser
header('Content-Disposition: attachment;filename="myfile.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
【讨论】:
【参考方案3】:你需要写
$sheet->fromArray([$header], NULL, 'A1');
【讨论】:
【参考方案4】:你需要包含命名空间
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
【讨论】:
如果您“使用”类上方的命名空间,则不需要包含命名空间。以上是关于使用 phpspreadsheet 库将数据从数组写入工作表的主要内容,如果未能解决你的问题,请参考以下文章
从 csv 文件读取数据并使用 phpspreadsheet 写入 excel
如何使用 SQFLite 或 Moor 库将 JSON 数据存储到颤振中的数据库表中
PhpOffice\PhpSpreadsheet 从 excel 错误字符集中导入 mysql