web-dev-qa-db-ja.com

WebページにCSVファイルをHTMLテーブルとして動的に表示する

サーバー側にあるCSVファイルを取得し、htmlテーブルとして動的に表示したいと思います。たとえば、これ:

Name, Age, Sex
"Cantor, Georg", 163, M

これになるはずです:

<html><body><table>
<tr> <td>Name</td> <td>Age</td> <td>Sex</td> </tr>
<tr> <td>Cantor, Georg</td> <td>163</td> <td>M</td> </td>
</table></body></html>

任意の言語のソリューションを歓迎します。

29
dreeves

以前にリンクされたソリューション は恐ろしいコードです。ほとんどすべての行にバグが含まれています。代わりに fgetcsv を使用します。

<?php
echo "<html><body><table>\n\n";
$f = fopen("so-csv.csv", "r");
while (($line = fgetcsv($f)) !== false) {
        echo "<tr>";
        foreach ($line as $cell) {
                echo "<td>" . htmlspecialchars($cell) . "</td>";
        }
        echo "</tr>\n";
}
fclose($f);
echo "\n</table></body></html>";
89
phihag

以下は、phpを使用してcsvをhtmlテーブルに変換する簡単な関数です。

_function jj_readcsv($filename, $header=false) {
$handle = fopen($filename, "r");
echo '<table>';
//display header row if true
if ($header) {
    $csvcontents = fgetcsv($handle);
    echo '<tr>';
    foreach ($csvcontents as $headercolumn) {
        echo "<th>$headercolumn</th>";
    }
    echo '</tr>';
}
// displaying contents
while ($csvcontents = fgetcsv($handle)) {
    echo '<tr>';
    foreach ($csvcontents as $column) {
        echo "<td>$column</td>";
    }
    echo '</tr>';
}
echo '</table>';
fclose($handle);
}
_

jj_readcsv('image_links.csv',true);のようにこの関数を呼び出すことができます

2番目のパラメーターがtrueの場合、csvの最初の行はヘッダー/タイトルとして取得されます。

これが誰かを助けることを願っています。このコードの欠陥についてコメントしてください。

13
Joby Joseph

phihagの答えは、各行を単一のセルに配置しますが、各値は個別のセルに配置するよう求めています。これはそれを行うようです:

<?php
// Create a table from a csv file 
echo "<html><body><table>\n\n";
$f = fopen("so-csv.csv", "r");
while (($line = fgetcsv($f)) !== false) {
        $row = $line[0];    // We need to get the actual row (it is the first element in a 1-element array)
        $cells = explode(";",$row);
        echo "<tr>";
        foreach ($cells as $cell) {
            echo "<td>" . htmlspecialchars($cell) . "</td>";
        }
        echo "</tr>\n";
}
fclose($f);
echo "\n</table></body></html>";
?>
4
user3257572