xlswriter实现导出功能
PHP扩展-xlswriter实现导出功能
/**
* 表头
*
* @param $title
* @return array
* @author fangxinlei
* @datetime 2024/9/13 14:21
*/
public static function getHeader($title): array
{
$service = new \app\service\organize\FormService(new \app\dao\organize\FormDao());
$data = $service->getFormByTitle($title);
// "index" => "序号"
return array_column($data, 'title', 'field');
}
/**
* 格式化数据
*
* @param $title
* @param $data
* @return array
* @author fangxinlei
* @datetime 2024/9/13 14:18
*/
private static function handleDataByTitle($title, $data): array
{
$sortData = [];
foreach ($data as $item) {
$tmp = [];
foreach ($title as $t) {
$tmp[] = $item[$t];
}
$sortData[] = $tmp;
}
return $sortData;
}
/**
* @param $data
* @param $filename
* @param $header
* @return void
* @author fangxinlei
* @datetime 2024/9/13 14:19
*/
public static function exportByXls($data, $filename, $header)
{
$config = [
'path' => self::getTmpDir() . '/',
];
// $filename = 'tutorial01.xlsx';
$xlsxObject = new Excel($config);
// Init File
$fileObject = $xlsxObject->fileName($filename);
// Writing data to a file ......
// $fileObject = $fileObject->header(['Item', 'Cost']);
//
// $fileObject = $fileObject->data([
// ['Rent', 1000],
// ['Gas', 100],
// ['Food', 300],
// ['Gym', 50],
// ]);
$fileObject = $fileObject->header(array_values($header));
$title = array_keys($header);
$data = self::handleDataByTitle($title, $data);
$fileObject = $fileObject->data($data);
// Outptu
$filePath = $fileObject->output();
// Set Header
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Content-Length: ' . filesize($filePath));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Cache-Control: max-age=0');
header('Pragma: public');
ob_clean();
flush();
if (copy($filePath, 'php://output') === false) {
// Throw exception
}
// Delete temporary file
@unlink($filePath);
}
License:
CC BY 4.0