extract_office.py

#!/usr/bin/env python3
"""
解压缩 Office Open XML 文件并查看内容
"""

import os
import zipfile

def extract_office_file(file_path: str, output_dir: str) -> None:
    """
    解压缩 Office Open XML 文件

    Args:
        file_path: 输入文件路径
        output_dir: 输出目录
    """
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    try:
        with zipfile.ZipFile(file_path, 'r') as zip_ref:
            zip_ref.extractall(output_dir)
        print(f"文件解压缩成功,输出到: {output_dir}")
    except Exception as e:
        print(f"解压缩失败: {e}")

def list_office_contents(file_path: str) -> None:
    """
    列出 Office Open XML 文件的内容

    Args:
        file_path: 文件路径
    """
    try:
        with zipfile.ZipFile(file_path, 'r') as zip_ref:
            print("文件内容列表:")
            for file_name in zip_ref.namelist():
                print(f"  - {file_name}")
    except Exception as e:
        print(f"读取文件内容失败: {e}")

if __name__ == "__main__":
    file_path = "/root/.openclaw/media/inbound/面上项目-正文-2026---4cdee90a-5d04-451f-bd2c-0eff9dbaa7fc"
    output_dir = "/root/.openclaw/workspace/office_content"

    print("列出文件内容:")
    list_office_contents(file_path)

    print("\n解压缩文件:")
    extract_office_file(file_path, output_dir)

    print("\n检查解压后的文件:")
    if os.path.exists(output_dir):
        for root, dirs, files in os.walk(output_dir):
            level = root.replace(output_dir, '').count(os.sep)
            indent = ' ' * 2 * (level)
            print(f'{indent}{os.path.basename(root)}/')
            subindent = ' ' * 2 * (level + 1)
            for file in files:
                print(f'{subindent}{file}')