为什么我在wordpress中导出的excel文件中有html和css?

问题描述 投票:0回答:1

当用户按下 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。

php wordpress export-to-excel
1个回答
0
投票

在第二个

save()
之后通过调用
exit(0);
终止您的php脚本。 并确保在发送生成文件的标头之前不发送任何输出。在将标头发送到 php://output 之前,您可以尝试使用
ob_end_clean();
。 另请参阅:https://github.com/PHPOffice/PhpSpreadsheet/issues/217 对于有相同问题的人(尽管这并不是真正的包问题)。

© www.soinside.com 2019 - 2024. All rights reserved.