ツール備忘録:ExcelをHTMLに変換する方法
Excelの表をHTMLに変換したい
このブログをはじめて最も苦戦したのが表の作成でした。
PHPやPythonに触れ、プログラムを覚えてからは表の作成はループ処理で行うことがほとんど。
tdタグの数を数える作業がこれほど進まず苦痛だったとは...。
この苦行から逃れるため「絶対に何か方法はあるはず!」と考え調査してみる事にしました。
変換に使うサンプルはWowma!のCSVファイルで照会したitem.csv を切詰めたテスト版のこいつ。

Excelの【名前を付けてHTML保存】で実験
天下のマイクロソフトさんが作った機能なのだから一発OKさ!
そんな思いもむなしく、散々な結果に...。
<table border=0 cellpadding=0 cellspacing=0 width=862 style='border-collapse:
collapse;table-layout:fixed;width:647pt'>
<col width=72 span=7 style='width:54pt'>
<col width=358 style='mso-width-source:userset;mso-width-alt:11456;width:269pt'>
<tr height=25 style='height:18.75pt'>
<td height=25 class=xl65 width=72 style='height:18.75pt;width:54pt'>No</td>
<td class=xl65 width=72 style='border-left:none;width:54pt'>フィール<span
style='display:none'>ド<ruby>名<font class="font5"><rt>メイ</rt></font></ruby></span></td>
<td class=xl65 width=72 style='border-left:none;width:54pt'><ruby>項目<span
style='display:none'><rt>コウモク</rt></span></ruby><ruby>名<span
style='display:none'><rt>メイ</rt></span></ruby></td>
<td class=xl65 width=72 style='border-left:none;width:54pt'><ruby>入力<span
style='display:none'><rt>ニュウリョク</rt></span></ruby></td>
<td class=xl65 width=72 style='border-left:none;width:54pt'><ruby>型<span
style='display:none'><rt>カタ</rt></span></ruby></td>
<td class=xl65 width=72 style='border-left:none;width:54pt'>バイト<ruby>数<span
style='display:none'><rt>スウ</rt></span></ruby></td>
<td class=xl65 width=72 style='border-left:none;width:54pt'><ruby>検索<span
style='display:none'><rt>ケンサク</rt></span></ruby><ruby>対象<span
style='display:none'><rt>タイショウ</rt></span></ruby></td>
<td class=xl65 width=358 style='border-left:none;width:269pt'><ruby>入力値<span
style='display:none'><rt>ニュウリョクチ</rt></span></ruby><ruby>説明<span
style='display:none'><rt>セツメイ</rt></span></ruby></td>
</tr>
<tr height=175 style='height:131.25pt'>
<td height=175 class=xl65 align=right style='height:131.25pt;border-top:none'>1</td>
<td class=xl65 style='border-top:none;border-left:none'>ctrlCol</td>
<td class=xl65 style='border-top:none;border-left:none'>コントロ<span
style='display:none'>ールカラム</span></td>
<td class=xl65 style='border-top:none;border-left:none'>必須</td>
<td class=xl65 style='border-top:none;border-left:none'><ruby>文字列<span
style='display:none'><rt>モジレツ</rt></span></ruby></td>
<td class=xl65 align=right style='border-top:none;border-left:none'>1</td>
<td class=xl65 style='border-top:none;border-left:none'>-</td>
<td class=xl66 width=358 style='border-top:none;border-left:none;width:269pt'>選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。<br>
コントロールカラムのヘッダーがない場合エラーとなる。<br>
※stock.csvの場合、Dは設定できません。</td>
</tr>
<tr height=25 style='height:18.75pt'>
<td height=25 class=xl65 align=right style='height:18.75pt;border-top:none'>2</td>
<td class=xl65 style='border-top:none;border-left:none'>lotNumber</td>
<td class=xl65 style='border-top:none;border-left:none'>ロットナ<span
style='display:none'>ンバー</span></td>
<td class=xl65 style='border-top:none;border-left:none'>-</td>
<td class=xl65 style='border-top:none;border-left:none'><ruby>数値<span
style='display:none'><rt>スウチ</rt></span></ruby></td>
<td class=xl65 align=right style='border-top:none;border-left:none'>18</td>
<td class=xl65 style='border-top:none;border-left:none'>-</td>
<td class=xl65 style='border-top:none;border-left:none'> </td>
</tr>
<tr height=25 style='height:18.75pt'>
<td height=25 class=xl65 align=right style='height:18.75pt;border-top:none'>3</td>
<td class=xl65 style='border-top:none;border-left:none'>itemCode</td>
<td class=xl65 style='border-top:none;border-left:none'>商品コー<span
style='display:none'>ド</span></td>
<td class=xl65 style='border-top:none;border-left:none'>-</td>
<td class=xl65 style='border-top:none;border-left:none'><ruby>文字列<span
style='display:none'><rt>モジレツ</rt></span></ruby></td>
<td class=xl65 align=right style='border-top:none;border-left:none'>256</td>
<td class=xl65 style='border-top:none;border-left:none'>◎</td>
<td class=xl65 style='border-top:none;border-left:none'> </td>
</tr>
<![if supportMisalignedColumns]>
<tr height=0 style='display:none'>
<td width=72 style='width:54pt'></td>
<td width=72 style='width:54pt'></td>
<td width=72 style='width:54pt'></td>
<td width=72 style='width:54pt'></td>
<td width=72 style='width:54pt'></td>
<td width=72 style='width:54pt'></td>
<td width=72 style='width:54pt'></td>
<td width=358 style='width:269pt'></td>
</tr>
<![endif]>
</table>
え?ナニコレ??
こんな簡単なテーブルを何故にここまで複雑に出来るのでしょう...。
よく見るとふり仮名が display:none で登録されてます。単語が分割されてるってことは形態素分析かけたのでしょう。
<td class=xl65 width=72 style='border-left:none;width:54pt'><ruby>項目<span style='display:none'><rt>コウモク</rt></span></ruby><ruby>名<span style='display:none'><rt>メイ</rt></span></ruby></td>
ごめんなさい、困難ごちゃごちゃしたのは不要です。
Googleさんに聞いてみました
まずは検索ワード【excel html テーブル 変換】で実行。
おっ!結構ツール提供してくださる方がいるんですね。
どれもExcelの表をコピーしWEBの所定の位置にペーストするだけ。それぞれ動作が少しづつ違う所がまた面白いです。
と言うことで検索結果を4サイト備忘録として残します。
使い方がシンプルな Excel to HTML
TECH-UNLIMiTEDさん提供のExcel⇒HTMLテーブル変換ツール。thタグ考慮されていて、行、列、行+列の3タイプに対応してます。
タブでインデントを付けてくれるので見やすさも最高です。
<table> <tr> <th>No</th> <th>フィールド名</th> <th>項目名</th> <th>入力</th> <th>型</th> <th>バイト数</th> <th>検索対象</th> <th>入力値説明</th> </tr> <tr> <td>1</td> <td>ctrlCol</td> <td>コントロールカラム</td> <td>必須</td> <td>文字列</td> <td>1</td> <td>-</td> <td>"選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。</td> </tr> <tr> <td>コントロールカラムのヘッダーがない場合エラーとなる。</td> </tr> <tr> <td>※stock.csvの場合、Dは設定できません。"</td> </tr> <tr> <td>2</td> <td>lotNumber</td> <td>ロットナンバー</td> <td>-</td> <td>数値</td> <td>18</td> <td>-</td> <td></td> </tr> <tr> <td>3</td> <td>itemCode</td> <td>商品コード</td> <td>-</td> <td>文字列</td> <td>256</td> <td>◎</td> <td></td> </tr> <tr> <td></td> </tr> </table>
一部でおかしな挙動がありました。
<td>"選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。</td> </tr> <tr> <td>コントロールカラムのヘッダーがない場合エラーとなる。</td> </tr> <tr> <td>※stock.csvの場合、Dは設定できません。"</td> </tr>
ここはセル内改行を行っていた箇所です。
どうやら別々に認識されて違う行に移されてしまったみたいです。
インデントが変えられるExcelからHTMLテーブル変換
エーオーシステムさんが提供して下さっているツールです。
インデントって確かに個人個人で癖あるんですよね。Python使いは「インデントは半角スペース2つ!」とか言いそうです。ちなみに私は基本タブ。慣れたインデント以外はチョット気持ち悪かったりします。「そこに目を付けるか!」そんな面白いツールです。では、タブ区切りで実行してみます。
<table> <tr> <td>No</td> <td>フィールド名</td> <td>項目名</td> <td>入力</td> <td>型</td> <td>バイト数</td> <td>検索対象</td> <td>入力値説明</td> </tr> <tr> <td>1</td> <td>ctrlCol</td> <td>コントロールカラム</td> <td>必須</td> <td>文字列</td> <td>1</td> <td>-</td> <td>選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。 コントロールカラムのヘッダーがない場合エラーとなる。 ※stock.csvの場合、Dは設定できません。</td> </tr> <tr> <td>2</td> <td>lotNumber</td> <td>ロットナンバー</td> <td>-</td> <td>数値</td> <td>18</td> <td>-</td> <td></td> </tr> <tr> <td>3</td> <td>itemCode</td> <td>商品コード</td> <td>-</td> <td>文字列</td> <td>256</td> <td>◎</td> <td></td> </tr> </table>
先程のExcel To HTMLで発生したセル内改行の問題はクリアされてます。(改行はなくなり、スペース区切りで結合されてます)
<td>選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。 コントロールカラムのヘッダーがない場合エラーとなる。 ※stock.csvの場合、Dは設定できません。</td>
ExcelからHTMLテーブル変換もシンプルなテーブルを吐き出してくれて大満足です。
セル内改行のあるExcelを快適変換
タグインデックスさんが提供してくれているExcel⇒HTMLテーブル変換ツール。
使い方はいたってシンプル。上記2つのツールに無かった特徴的な点が【セル内改行の変換ルール】を設定できる事。作ってみたテーブルがこちら。
<table border="1"> <thead> <tr> <th>No</th> <th>フィールド名</th> <th>項目名</th> <th>入力</th> <th>型</th> <th>バイト数</th> <th>検索対象</th> <th>入力値説明</th> </tr> </thead> <tbody> <tr> <th>1</th> <td>ctrlCol</td> <td>コントロールカラム</td> <td>必須</td> <td>文字列</td> <td>1</td> <td>-</td> <td>選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。<br>コントロールカラムのヘッダーがない場合エラーとなる。<br>※stock.csvの場合、Dは設定できません。</td> </tr> <tr> <th>2</th> <td>lotNumber</td> <td>ロットナンバー</td> <td>-</td> <td>数値</td> <td>18</td> <td>-</td> <td></td> </tr> <tr> <th>3</th> <td>itemCode</td> <td>商品コード</td> <td>-</td> <td>文字列</td> <td>256</td> <td>◎</td> <td></td> </tr> </tbody> </table>
border="1" が勝手に入ってますが、まぁこれくらいなら修正簡単なので問題ないですね。
注目はここ。
<td>選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。<br>コントロールカラムのヘッダーがない場合エラーとなる。<br>※stock.csvの場合、Dは設定できません。</td>
見事です。
スタイルシートまで作るExcel⇒HTML変換ツール
エクセルシートをHTMLテーブルに変換しちゃう君 (ββ)ネーミングセンスはさておき、誰が提供してくださってるのでしょか。こんな便利なツール、沢山テーブル書く前に知りたかったです。最大の特徴はスタイルシートの作成!thタグのカラー指定までできてしまいます。
<style>
table {
border-collapse: collapse;
}
th {
border: solid 1px #666666;
color: #000000;
background-color: #ff9999;
}
td {
border: solid 1px #666666;
color: #000000;
background-color: #ffffff;
}
</style>
<table>
<thead>
<tr>
<th>
No
</th>
<th>
フィールド名
</th>
<th>
項目名
</th>
<th>
入力
</th>
<th>
型
</th>
<th>
バイト数
</th>
<th>
検索対象
</th>
<th>
入力値説明
</th>
</tr>
</thead>
<tbody>
<tr>
<th>
1
</th>
<td>
ctrlCol
</td>
<td>
コントロールカラム
</td>
<td>
必須
</td>
<td>
文字列
</td>
<td>
1
</td>
<td>
-
</td>
<td>
選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。<br />
コントロールカラムのヘッダーがない場合エラーとなる。<br />
※stock.csvの場合、Dは設定できません。
</td>
</tr>
<tr>
<th>
2
</th>
<td>
lotNumber
</td>
<td>
ロットナンバー
</td>
<td>
-
</td>
<td>
数値
</td>
<td>
18
</td>
<td colspan="2">
-
</td>
</tr>
<tr>
<th>
3
</th>
<td>
itemCode
</td>
<td>
商品コード
</td>
<td>
-
</td>
<td>
文字列
</td>
<td>
256
</td>
<td colspan="2">
◎
</td>
</tr>
</tbody>
</table>
セル内改行はこんな感じで見やすいです。
<td> 選択肢別在庫の軸を設定(今ある軸を削除して再作成)する場合はN、在庫数を更新する場合Uを設定する。設定がない場合(空の場合)、処理をスキップする。<br /> コントロールカラムのヘッダーがない場合エラーとなる。<br /> ※stock.csvの場合、Dは設定できません。 </td>
まとめ
備忘録として記載した4つのツール共に特徴があり調べていて楽しかったです。
私の用途としては、タグインデックスさんのツールを最も利用するかなぁ。
これが判ると億劫になっていた各モールのAPI仕様もこのブログに記載できそうな気がしてきました。


