数组到CSV导出功能在WordPress插件中面临问题

2022-08-30 23:48:50

我正在我的插件页面中使用简单的数组到CSV导出功能来生成报告。

当我运行此代码时,我收到一个错误,它将导出整个html内容以及我预期的数组。

这是我的代码:

function convert_to_csv($input_array, $output_file_name, $delimiter)
{
    clearstatcache();
    /** open raw memory as file, no need for temp files */
    $temp_memory = fopen('php://memory', 'w');
    /** loop through array  */



    foreach ($input_array as $line) {
        /** default php csv handler **/
        fputcsv($temp_memory, $line, $delimiter);
    }

    //echo '<pre>';
    //print_r($temp_memory); exit;
    /** rewrind the "file" with the csv lines **/
    fseek($temp_memory, 0);
    /** modify header to be downloadable csv file **/
    header('Content-Type: application/csv');
    header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
    /** Send file to browser for download */
    fpassthru($temp_memory);
}

/** Array to convert to csv */

$array_to_csv = Array(
    Array(12566,
        'Enmanuel',
        'Corvo'
    ),
    Array(56544,
        'John',
        'Doe'
    ),
    Array(78550,
        'Mark',
        'Smith'
    )

);

clearstatcache();

convert_to_csv($array_to_csv, 'report.csv', ',');

答案 1

我猜WP在调用此函数后继续进行其正常操作,因此您将在CSV之后获得HTML模板输出。在之后放入一个语句应该这样做,但你需要小心,这不会搞砸Wordpress在每个页面响应结束时所做的任何其他事情。例如,Drupal有一个用于此目的的功能。我对WP不够熟悉,无法确定,但是wp_die()函数的文档表明,您可以使用PHP而不会出现太多问题exitfpassthrudrupal_exit()exit


答案 2

您可以使用此代码生成扩展名为.xlsx Excel文件

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/alasql/0.3/alasql.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.7.12/xlsx.core.min.js"></script>

<script type="text/javascript">
    $(document).ready(function() {
    var insuranceArray = new Array(insuranceInfo);
    var bills = db.bills;

    //Create tabs in excel file
    var opts = [{sheetid:'Insurance Information',header:true},{sheetid:'bills Info',header:false}];

    alasql('SELECT * INTO XLSX("Data.xlsx",?) FROM ?', [opts, insuranceArray,bills]]);

    // Close the window once you save the file
    window.onfocus=function(){ 
        window.close();
    }
</script>

此代码适用于我...