当用户按下 WordPress 中的导出按钮时,我尝试将数据库中的表导出到扩展名为 .CSV 的 Excel 文件。我可以导出表格,但导出时,表格还包含所有 HTML、CSS 和 JavaScript 标签。有人可以检查我的代码并告诉我如何在没有 html 和 CSS 的情况下导出文件吗?我把我的代码放在一个短代码中,然后添加到页面中。 [[我导出的 Excel 文件的屏幕截图] (https://i.stack.imgur.com/QjOhQ.png)] 谢谢 这是我的代码
session_start();
$con = new mysqli("","","","");
require '/home/public_html/wp-content/plugins/cbxphpspreadsheet/lib/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Xls;
use PhpOffice\PhpSpreadsheet\Writer\Csv;
if(isset($_POST['export_excel_btn']))
{
$file_ext_name = $_POST['export_file_type'];
$fileName = "student-sheet";
$student = "SELECT * FROM students";
$query_run = mysqli_query($con, $student);
if(mysqli_num_rows($query_run) > 0)
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Full Name');
$sheet->setCellValue('C1', 'Email');
$sheet->setCellValue('D1', 'Phone');
$sheet->setCellValue('E1', 'Course');
$rowCount = 2;
foreach($query_run as $data)
{
$sheet->setCellValue('A'.$rowCount, $data['id']);
$sheet->setCellValue('B'.$rowCount, $data['fullname']);
$sheet->setCellValue('C'.$rowCount, $data['email']);
$sheet->setCellValue('D'.$rowCount, $data['phone']);
$sheet->setCellValue('E'.$rowCount, $data['course']);
$rowCount++;
}
if($file_ext_name == 'xlsx')
{
$writer = new Xlsx($spreadsheet);
$final_filename = $fileName.'.xlsx';
}
elseif($file_ext_name == 'xls')
{
$writer = new Xls($spreadsheet);
$final_filename = $fileName.'.xls';
}
elseif($file_ext_name == 'csv')
{
$writer = new Csv($spreadsheet);
$final_filename = $fileName.'.csv';
}
$writer->save($final_filename);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: inline; filename="'.urlencode($final_filename).'"');
$writer->save('php://output');
}
else
{
$_SESSION['message'] = "No Record Found";
header('Location: index.php');
exit(0);
}}
session_destroy();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12 mt-4">
<?php
if(isset($_SESSION['message']))
{
echo "<h4>".$_SESSION['message']."</h4>";
unset($_SESSION['message']);
}
?>
<div class="card mt-5">
<div class="card-header">
<h4>Export Clients Data into an Excel File</h4>
</div>
<div class="card-body">
<form action="" method="POST">
<select name="export_file_type" class="form-control">
<option value="xlsx">XLSX</option>
<option value="xls">XLS</option>
<option value="csv">CSV</option>
</select>
<button type="submit" name="export_excel_btn" class="btn btn-primary mt-3">Export</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<?php session_write_close();
我尝试使用简短的代码将数据库中的表导出到 WordPress 中的 Excel 文件中。我可以导出文件,但是当我打开文件时,文件中还包含页面中的 html、css 和 JavaScript。
在第二个
save()
之后通过调用exit(0);
终止您的php脚本。
并确保在发送生成文件的标头之前不发送任何输出。在将标头发送到 php://output 之前,您可以尝试使用 ob_end_clean();
。
另请参阅:https://github.com/PHPOffice/PhpSpreadsheet/issues/217 对于有相同问题的人(尽管这并不是真正的包问题)。