somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】Excelの表をHTMLテーブルに変換する

ブログ用にテーブルを整形するのが面倒なので、phpで書いてみました。FC2はリアルタイムプレビューもあるのですが、修正が面倒なためです。

TSVをHTMLテーブルに変換

Excelの表ををコピーした時にTSV形式になるので、その形式に対応できるようにしています。ただし、セル内で改行していないこと、セルの結合をしていないことが条件です。コードは以下の通りです。

<?php
// ファイル名設定
$current_dir = __DIR__.DIRECTORY_SEPARATOR;
$input_file  = $current_dir.'input.txt';
$output_file = $current_dir.'output.html';

// TSVをHTMLテーブルに変換
$contents = file_get_contents($input_file);
$output_html = '<table border="1">'."\r\n";

foreach (explode("\r\n", $contents) as $line) {
  // 空行の除外
  if (empty($line)) {
    continue;
  }

  // タブ区切りの変換
  $output_html .= '<tr>';
  foreach (explode("\t", $line) as $value) {
    $output_html .= sprintf('<td>%s</td>', $value);
  }
  $output_html .= '</tr>'."\r\n";
}

$output_html .= '</table>';

// 出力
file_put_contents($output_file, $output_html);

このソースと同じディレクトリに変換したいデータを格納するinput.txtファイルを用意します。変換結果を同じディレクトリのoutput.htmlファイルに出力します。

おまけ

ソース内の<や>を毎回変換するのが面倒なので、それも変換するコードを作りました。ただ読み込んでhtmlspecialcharsかけて出力するだけです。

<?php
file_put_contents(__DIR__.DIRECTORY_SEPARATOR.'output.txt',
                  htmlspecialchars(file_get_contents(__DIR__.DIRECTORY_SEPARATOR.'input.txt', ENT_QUOTES)));