Mysql и PHP в Excel

0

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

function exportExcel($filename='ExportExcel',$columns=array(),$data=array(),$replaceDotCol=array()){
   global $connect;
    header('Content-Encoding: UTF-8');
    header('Content-Type: text/plain; charset=utf-8'); 
    header("Content-disposition: attachment; filename=".$filename.".xls");
    echo "\xEF\xBB\xBF"; // UTF-8 BOM
    $count=count($columns);
    echo '<table border="1">';
    echo '<th>1</th>';
    echo '<th>2</th>';
    foreach($columns as $col){
        echo '<tr><th>'.trim($col).'</th>';
        foreach($data as $val){
            for($i=0; $i < $count; $i++){
                if(in_array($i,$replaceDotCol)){
                    echo '<td>'.str_replace('.',',',$val[$i]).'</td></tr>';
                }else{
                    echo '<td>'.$val[$i].'</td></tr>';
                }
            }
        }
    }
}        

Я посылаю два массива для работы, один из них содержит описания, такие как имя, день рождения, место рождения и т.д., А другой - мои данные mysql.

Моя цель - показать эти сведения в двух столбцах. В моем коде выходной вывод любит только строки.

Изображение 174551

  • 3
    Почему HTML, я думаю, CSV будет проще всего. php.net/manual/en/function.fputcsv.php
  • 1
    @chris85 chris85 К сожалению, MS Excel позволяет сохранять таблицы HTML в формате .xls(x) и правильно отображать их в соответствии с указанными стилями. Многие начинающие программисты, особенно из 90-х и начала 2000-х годов, склонны злоупотреблять этой возможностью, чтобы маскировать HTML-таблицы в файлы Excel ...
Показать ещё 3 комментария
Теги:
html-table
export-to-excel

2 ответа

0

Помимо структуры html, также у меня были ошибки на моих петлях foreach. Кажется, мне они не нужны. Просто, используя один цикл while для всех массивов, при условии правильного отображения. Новичок здесь.

function exportExcel($filename='ExportExcel',$columns=array(),$data=array(),$replaceDotCol=array()){
   global $connect;
    header('Content-Encoding: UTF-8');
    header('Content-Type: text/plain; charset=utf-8'); 
    header("Content-disposition: attachment; filename=".$filename.".xls");
    echo "\xEF\xBB\xBF"; // UTF-8 BOM

    $count=count($columns);
    $i = 0  ;
    echo '<table border="1">';
    while ($i<=$count) {
        echo "<tr>";
        echo "<th>" .$columns[$i]."</th>";
        echo "<td style='width='60%''>" .$data[$i]. "</td>";
        echo "<tr>";
        $i++;

    }
    echo "</table>";

}

дисплей

0

вы закрываете свою строку, используя </tr> каждый раз, когда вы пишете значение столбца. Итак, а) ваша окончательная разметка, вероятно, недействительна (хотя Excel может ее терпеть и угадать, что вы имели в виду), и б) почему все находится в одном столбце. Закрывайте <tr> после того, как вы написали все нужные столбцы в этой строке. Кроме того, вы не выводите строку заголовка должным образом, она объединяется в данные.

Это должно работать:

echo '<tr>'; //header row

foreach($columns as $col){
    echo '<th>'.trim($col).'</th>';
}

echo '</tr>'; //end header row

foreach($data as $val){
    echo '<tr>'; //begin data row
    for($i=0; $i < $count; $i++){
        if(in_array($i,$replaceDotCol)){
            echo '<td>'.str_replace('.',',',$val[$i]).'</td>';
        }else{
            echo '<td>'.$val[$i].'</td>';
        }
    }
    echo '</tr>'; //end data row
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню