概要
xlsx2md.py は、Excelファイル(.xlsx、.xlsm)から値、数式、コメント、図・グラフ情報などを抽出し、Markdown形式のドキュメントとして出力する変換ツールです。セル内のデータだけでなく、結合セルや名前付き範囲などのメタデータ、埋め込み画像も抽出可能です。
動作原理
本スクリプトは、Excelファイルの解析にサードパーティ製ライブラリを用いています。ファイル読み込み時に、数式が保持された状態のワークブックと、計算済みのキャッシュ値が保持されたワークブックの両方を読み込み、同じセルの数式と値をペアとして抽出します。抽出された各種データ(値、数式、コメント、ハイパーリンク、条件付き書式など)は、Markdownのテーブル形式に整形されて出力されます。 (※数式セルの値はExcelファイル内に保存されているキャッシュ値を利用しており、本プログラム自体では再計算を行いません)
依存ライブラリ
標準ライブラリ以外に、以下の非標準ライブラリに依存しています。
openpyxl
入出力仕様
本プログラムはCLI(コマンドラインインターフェース)として動作し、以下の入出力を行います。
入力
Excelファイル(
.xlsx、.xlsm)
出力
Markdownファイル(デフォルト文字コードは
utf-8)(埋め込み画像が存在する場合)画像ファイル群(デフォルトは
imagesディレクトリ内に出力)
コマンドラインオプション
-iまたは--input: 入力するExcelファイル名(必須)-oまたは--output: 出力するMarkdownファイル名(必須)--imagedir: 画像を出力するディレクトリ名(デフォルト:images)--max-rows: 値表として出力する最大行数(デフォルト:200)--max-cols: 値表として出力する最大列数(デフォルト:60)--max-formulas: 数式表として出力する最大数式数(デフォルト:2000)--all: 行数・列数・数式数の制限を解除し、全範囲を出力する--no-values: 値のMarkdown表を出力しない--no-formulas: 数式のMarkdown表を出力しない--no-metadata: 結合セル、名前付き範囲、テーブル等のメタ情報を出力しない--no-comments: セルコメントを出力しない--no-charts: グラフ情報を出力しない--no-images: 埋め込み画像を抽出しない--date-format: 日時セルの出力形式(デフォルト:%Y-%m-%d %H:%M:%S)--encoding: Markdown出力の文字コード(デフォルト:utf-8)--pause: 終了時に待機する(ゼロ以外で待機)
機能詳細
本プログラムがExcelファイルから抽出し、Markdownとして出力する情報は以下の通りです。
ワークブック全体の情報
定義された名前(名前付き範囲など)
シートごとの情報
シート概要: 使用範囲の推定値、シートの表示状態、ウィンドウ枠の固定状態、オートフィルターの範囲。
値: セルの計算済み値。日時は
--date-formatで指定された形式に変換されます。数式: セルの番地、数式文字列、キャッシュされた値、および表示形式。
コメント: セルの番地、作成者、コメントテキスト。
メタデータ: ハイパーリンク、結合セル、Excelテーブル、非表示の行と列、データの入力規則、条件付き書式。
グラフ: グラフの種類、アンカー(配置セル)、タイトル、各軸のタイトル、系列情報(参照範囲など)。
画像: 埋め込み画像を抽出し、指定された画像ディレクトリに保存した上で、Markdown内に画像への参照リンクを生成します。
実行例
基本的な実行例です。入力ファイル sample.xlsx を読み込み、output.md に出力します。
python xlsx2md.py -i sample.xlsx -o output.md
画像ディレクトリを指定し、全ての行・列・数式を制限なしに出力する実行例です。
python xlsx2md.py -i data.xlsm -o result.md --imagedir extracted_images --all
不要な情報(値や画像など)をスキップして、メタデータのみを抽出する実行例です。
python xlsx2md.py -i report.xlsx -o metadata.md --no-values --no-images --no-charts