Данные не отображаются в столбцах при экспорте в Excel с использованием PHP и jquery - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь экспортировать данные в Excel на основе выбранного пользователем столбца из флажков, однако имя столбца объединяется в одну ячейку, а не сохраняется в столбцах. Может кто-нибудь сказать мне, как решить эту проблему? Ниже приведены мой код и мой вывод ошибок

Текущий вывод, который является неправильным: enter image description here

html

<form action="" id="colfilter"> 

    <input type="checkbox" name="column[]" class="column" value="[Column1]">
    <input type="checkbox" name="column[]" class="column" value="[Column2]">
    <input type="checkbox" name="column[]" class="column" value="[Column3]">
    <input type="checkbox" name="column[]" class="column" value="[Column4]">
    <a href="#" id="export">Download Full Data</a>

</form>

jquery

/*******export to excel*********/
            $('#export').click(function(){
                var colarray = [];
                var exportdata = 'true';

                $(".column").each(function(){
                    if($(this).is(":checked"))
                    {
                        colarray.push($(this).val());
                    }   
                }); 

                colarray = colarray.toString();

                $.ajax({
                    url: "exportxls_file.php",
                    method:"GET",
                    data: {exportdata:exportdata, colarray:colarray},
                    success: function(){
                         window.open(this.url,'_blank' );
                    }
                });             


            }); 

exportxls_file.php

if($_GET['exportdata'] == 'true'){

        $colarray = $_GET['colarray'];

        /***Replace [ and ] with open and close single quote******/
        $string1 = ['[',']'];
        $string2 = ["'","'"];
        $newcolarray = str_replace($string1, $string2, $colarray);

    $delimiter = ",";
    $filename = date('d-M-y') . ".csv"; // Create file name

    //create a file pointer
    $f = fopen('php://memory', 'w');

    $fields = array($newcolarray);

    fputcsv($f, $fields, $delimiter);

    //move back to beginning of file
    fseek($f, 0);

    //set headers to download file rather than displayed
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '";');

    //output all remaining data on a file pointer
    fpassthru($f);

 }

Ответы [ 4 ]

0 голосов
/ 01 ноября 2019

Успей решить сам. Мой массив обрабатывался как строка, поэтому мои данные были вставлены в одну ячейку вместо серии ячеек. Я переписал свой код и включил разнесение, чтобы преобразовать мою строку в массив. Ниже мой рабочий код:

$colarray = $_GET['colarray'];

$string1 = ['[',']'];

$string2 = ["",""];

$newcolarray = str_replace($string1, $string2, $colarray);

$newarray = explode(",",$newcolarray);

$filename = date('d-M-y') . ".csv"; // Create file name

$f = fopen('php://memory', 'w');

fputcsv($f, $newarray);

$query = "SELECT "; 
$query .= $colarray;

$query .= " FROM OVERALL_SUMMARY_ORIGINAL"; // Get data from Database from demo table
$stmt = sqlsrv_query($conn, $query);

while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){

    fputcsv($f, $row);

}
0 голосов
/ 31 октября 2019

Во-первых, вы упомянули, что хотите экспортировать данные в файл Excel, но экспортируете данные в формате CSV. «Формат CSV - это простой текстовый формат, в котором значения разделяются запятыми (значения, разделенные запятыми),не отображать данные в столбцах. Либо вы можете использовать PHPEXcellibrary для экспорта данных в формате Excel, либо вот некоторые ссылки на код, которые сработали для меня (которые вы можете настроить в соответствии со своими потребностями) -

Экспортданные в Excel с использованием PHP

Экспорт данных в Excel

Если вы хотите использовать PHPExcel, вот ссылка для ссылки на код:

Экспорт данных с использованием PHPExcel

Надеюсь, это сработает для вас.

0 голосов
/ 31 октября 2019

Если я добавлю фиксированный массив, подобный этому, имя столбца идеально вписывается в каждую ячейку столбца, но мне нужно, чтобы массив был динамическим, и этот массив обрабатывается как строка.

$fields = array('column1',
                'column2',
                'column3',
                'column4');
0 голосов
/ 31 октября 2019

Я думаю, что это может быть просто проблема с Excel, не использующим правильный sperator - вы можете определить разделитель, добавив

"sep=,"

в первую строку вашего CSV-файла.

Вы можете сделать это, добавив

fwrite($f, 'sep=,');

сразу после вашего $f = fopen('php://memory', 'w');

...