ライブラリMarkItDownをインストール
pip install markitdown -q
pip install markitdown[xlsx]
pythonコード
#!/usr/bin/env python3
"""
エクセルファイルをマークダウン形式に変換するスクリプト使用方法:
python excel_to_markdown.py <エクセルファイルパス> [出力ファイルパス]例:
python excel_to_markdown.py data.xlsx
python excel_to_markdown.py data.xlsx output.md
"""import argparse
import os
import sys
from pathlib import Path
from typing import Optionaltry:
from markitdown import MarkItDown
except ImportError:
print("エラー: markitdownライブラリがインストールされていません。")
print("以下のコマンドでインストールしてください:")
print("pip install markitdown")
sys.exit(1)
class ExcelToMarkdownConverter:
"""エクセルファイルをマークダウンに変換するクラス"""def __init__(self):
"""初期化"""
self.converter = MarkItDown()def convert_file(self, input_path: str, output_path: Optional[str] = None) -> str:
"""
エクセルファイルをマークダウンに変換Args:
input_path (str): 入力エクセルファイルのパス
output_path (Optional[str]): 出力マークダウンファイルのパス(省略時は自動生成)Returns:
str: 出力ファイルのパスRaises:
FileNotFoundError: 入力ファイルが存在しない場合
ValueError: ファイル形式がサポートされていない場合
"""
# 入力ファイルの存在確認
if not os.path.exists(input_path):
raise FileNotFoundError(f"入力ファイルが見つかりません: {input_path}")# ファイル拡張子の確認
input_ext = Path(input_path).suffix.lower()
if input_ext not in ['.xlsx', '.xls', '.xlsm']:
raise ValueError(f"サポートされていないファイル形式です: {input_ext}")# 出力ファイルパスの生成
if output_path is None:
input_path_obj = Path(input_path)
output_path = input_path_obj.with_suffix('.md')try:
# ファイル変換の実行
print(f"変換中: {input_path} -> {output_path}")
result = self.converter.convert(input_path)# マークダウンファイルの保存
with open(output_path, 'w', encoding='utf-8') as f:
f.write(result.text_content)print(f"変換完了: {output_path}")
return str(output_path)except Exception as e:
raise RuntimeError(f"変換中にエラーが発生しました: {str(e)}") from e
def main():
"""メイン関数"""
parser = argparse.ArgumentParser(
description="エクセルファイルをマークダウン形式に変換します",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
使用例:
python excel_to_markdown.py data.xlsx
python excel_to_markdown.py data.xlsx output.md
python excel_to_markdown.py /path/to/data.xlsx /path/to/output.md
"""
)parser.add_argument(
'input_file',
help='変換するエクセルファイルのパス'
)parser.add_argument(
'output_file',
nargs='?',
help='出力するマークダウンファイルのパス(省略時は自動生成)'
)parser.add_argument(
'--version',
action='version',
version='Excel to Markdown Converter 1.0.0'
)args = parser.parse_args()
try:
# コンバーターの初期化
converter = ExcelToMarkdownConverter()# ファイル変換の実行
output_path = converter.convert_file(args.input_file, args.output_file)print(f"✅ 変換が正常に完了しました: {output_path}")
except FileNotFoundError as e:
print(f"❌ ファイルエラー: {e}")
sys.exit(1)except ValueError as e:
print(f"❌ 値エラー: {e}")
sys.exit(1)except RuntimeError as e:
print(f"❌ 変換エラー: {e}")
sys.exit(1)
except (OSError, IOError) as e:
print(f"❌ ファイル操作エラー: {e}")
sys.exit(1)
if __name__ == "__main__":
main()