目次
背景
Web ページ上の表を Excel へ貼り付ける際、手作業ではセル合わせが煩雑になりがちです。そこで pandas の read_html
と openpyxl を組み合わせることで、HTML テーブルを簡潔に取得し、列幅を整えたうえでブックに出力する手順をご紹介いたします。
コード
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
# 新規ワークブックとワークシートを用意
workbook = Workbook()
sheet = workbook.active
sheet.title = "ImportedTable"
# 列幅を調整(例として列 D を 35 ピクセル相当へ)
sheet.column_dimensions["D"].width = 35
# HTML ファイル(または URL)を指定
table_url = "./table_sample.html"
# 見出しに「SecondHalf」という文字列を含むテーブルのみ抽出
table_frames = pd.read_html(table_url, match="SecondHalf")
# 取得した DataFrame を順次書き込み
for frame in table_frames:
for row in dataframe_to_rows(frame, index=False, header=True):
sheet.append(row)
# Excel ブックに保存
workbook.save("table_output.xlsx")
変更点
- ファイル名・シート名 を置き換え、著作権トラブルを回避しています。
match="SecondHalf"
とすることで、指定キーワードを含むテーブルのみを対象にしています。- 列幅を D 列 35 に設定し、長い文字列が折り返さず表示されるよう配慮いたしました。
ポイント解説
pd.read_html
でテーブル取得- URL でもローカル HTML でも同一関数で処理できます。
- 複数テーブルが存在する場合、
match
引数でフィルタリングすると無駄なデータを排除できます。
dataframe_to_rows
で行データへ変換index=False
を指定することで、DataFrame の行番号列を出力しません。- ヘッダー行を含める場合は
header=True
を維持してください。
- 列幅・書式のカスタマイズ
- 資料共有時は列幅調整が必須です。
openpyxl
ならセル書式やフォントも拡張可能です。
- 資料共有時は列幅調整が必須です。
- ファイル出力名の工夫
- 英数字のみのファイル名に統一すると、社内外の環境差異で文字化けが起こりにくくなります。
まとめ
本記事では、
- HTML テーブルの自動抽出
- Excel ブックへの転記と列幅調整
をワンステップで実現するサンプルコードをご提示いたしました。Web から定期取得する業務データも、スクリプト化することで転記ミスのない安定運用が可能です。ぜひご自身のワークフローに合わせて、列幅や書式を拡張しながらご活用ください。