前回はセルが結合している場合、うまく変換することができませんでした。今回は変換できるようにします。

実行結果はこんな感じになります。

場所 住所 最寄り駅 最寄り駅情報 徒歩
国会議事堂 東京都千代田区永田町1-7-1 国会議事堂前駅 東京メトロ丸ノ内線/東京メトロ千代田線 徒歩 4分
永田町駅 東京メトロ南北線/東京メトロ半蔵門線/東京メトロ有楽町線 徒歩 4分
溜池山王駅 東京メトロ銀座線/東京メトロ南北線 徒歩 9分
東京都庁 東京都新宿区西新宿二丁目 都庁前駅 都営大江戸線 徒歩 2分
西新宿駅 東京メトロ丸ノ内線 徒歩 6分
新宿駅 JR在来線/京王新線/京王線/小田急小田原線/都営新宿線/都営大江戸線 徒歩 6分
国会図書館 東京都千代田区永田町1丁目10-1 永田町駅 東京メトロ南北線/東京メトロ半蔵門線/東京メトロ有楽町線 徒歩 3分
国会議事堂前駅 東京メトロ丸ノ内線/東京メトロ千代田線 徒歩 8分
半蔵門駅 東京メトロ半蔵門線 徒歩 9分

とやればマージされている(ほかのセルと結合されている)セルを取得できます。また

このようにすれば結合されているセルの最初のものと最後のものを取得できます。

これで何列(何行)つながっているかもわかります。2以上であればつながっていることになります。

ボタンがクリックされたときのイベントハンドラは同じです。GetHtmlFromExcel(string excelPath)メソッドではGetTableHeaderメソッドとGetTableDataメソッドを呼び出していましたが、各メソッドが長くなるのでひとつにまとめました(後述)。それから最大幅を指定できるようにしました。

セルの場所を保存するためのクラスを作成しました。RowSpanとColumSpanはどれだけつながっているかを記録します。

以下はrowとcolumから文字色のカラーコードを取得するためのメソッドです。

全部でどれだけ行と列があるのかを調べるGetRowCountメソッドとGetColumCountメソッドを変更しました。もし結合しているセルをみつけたら次に探す値を変更しています。

GetMergedCellsメソッドは他のセルに結合されているセルと最初のセルのリストを取得するメソッドです。最初のセルを求めたら上記の方法でどれだけセルがつながっているかも調べてリストに格納します。

GetTableDataメソッドでtableタグの本体を取得します。結合しているセルに関する情報を集めて、結合しているセルの最初のセルであるなら colspan、colspanなどの適切なタグをいれます。それ以外の結合しているセルは無視します。これでtableタグが取得できるはずです。

これが生成されたtableタグです。