ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

pythonでExcelをマークダウン形式に変換

ライブラリ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 Optional

try:
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()