外部からExcelにテキストデータを流し込みたい時にセル内で改行するtips

やりたいこと

なんらかの元データ→スクリプト言語で中間データを生成→Excelで開いてxlsにする
というときに次の表の3と4が入っているセルのようにセル内で改行したい。

123
4

問題

ExcelのCSV, TSVはクォート付きでもセル内に改行があるとうまくいかない。

解法

Excel独自CSSを含むHTMLを生成して、生成したファイルをExcelで読ませる

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
br {mso-data-placement:same-cell;}
td {mso-number-format:"\@";}
</style>
</head>
<body>
<table><tr><td>1</td><td>2</td><td>3<br>4</td></tr></table>
</body>
</html>

ExcelはxlsをHTMLとして出力できて、その中を見ていくとExcelの書式設定を指定するCSSが含まれている。
逆にHTMLを生成して、Excelの書式設定を指定するCSSを指定してやると、Excelで読んだ時に書式設定が反映されている。

上の例だと、以下のようになる。

  • br {mso-data-placement:same-cell;} brタグに同一セル内での改行を指定。
  • td {mso-number-format:"\@";} tdタグに書式設定の表示形式を文字列に指定。

classやid指定も効くはず。