[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MVM2XA7WVZXZ2SQ81C2Y71":3,"skill-same:01M6MVM2XA7WVZXZ2SQ81C2Y71":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":69,"repositoryHtmlUrl":70,"repositoryHomepageUrl":6,"ownerHtmlUrl":71,"ownerBlogUrl":6,"ownerDescription":72,"updatedAt":73,"install":74,"resources":87},"01M6MVM2XA7WVZXZ2SQ81C2Y71","office-to-md",null,"Convert Office documents (Word, Excel, PowerPoint, PDF) to Markdown using Microsoft's markitdown","Kernel8901\u002Fai-agent-skills-classification","Kernel8901","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72647553?v=4","01M6KV388J2H5PNC8D8P940BJD","01M6KV38CS5B3AY63RKZB410YM",7,"MIT","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Foffice-to-md\u002FSKILL.md",[17,22,25],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":26,"categoryName":27,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000004","电子表格",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"office to md","office","markitdown","opus","sonnet","conversion","operations","computer","Word","convert","markdown","PDF","execution","file","code","powerpoint","documents","microsoft","github","xlsx","2026-11-10 10:12:30",false,"---\nname: office-to-md\ndescription: Convert Office documents (Word, Excel, PowerPoint, PDF) to Markdown using Microsoft's markitdown\nauthor: claude-office-skills\nversion: \"1.0\"\ntags: [markdown, conversion, markitdown, microsoft, office]\nmodels: [claude-sonnet-4, claude-opus-4]\ntools: [computer, code_execution, file_operations]\nlibrary:\n  name: markitdown\n  url: https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmarkitdown\n  stars: 86k\n---\n\n# Office to Markdown Skill\n\n## Overview\n\nThis skill enables conversion from various Office formats to Markdown using **markitdown** - Microsoft's open-source tool for converting documents to Markdown. Perfect for making Office content searchable, version-controllable, and AI-friendly.\n\n## How to Use\n\n1. Provide the Office file (Word, Excel, PowerPoint, PDF, etc.)\n2. Optionally specify conversion options\n3. I'll convert it to clean Markdown\n\n**Example prompts:**\n- \"Convert this Word document to Markdown\"\n- \"Turn this PowerPoint into Markdown notes\"\n- \"Extract content from this PDF as Markdown\"\n- \"Convert this Excel file to Markdown tables\"\n\n## Domain Knowledge\n\n### markitdown Fundamentals\n\n```python\nfrom markitdown import MarkItDown\n\n# Initialize converter\nmd = MarkItDown()\n\n# Convert file\nresult = md.convert(\"document.docx\")\nprint(result.text_content)\n\n# Save to file\nwith open(\"output.md\", \"w\") as f:\n    f.write(result.text_content)\n```\n\n### Supported Formats\n\n| Format | Extension | Notes |\n|--------|-----------|-------|\n| Word | .docx | Full text, tables, basic formatting |\n| Excel | .xlsx | Converts to Markdown tables |\n| PowerPoint | .pptx | Slides as sections |\n| PDF | .pdf | Text extraction |\n| HTML | .html | Clean markdown |\n| Images | .jpg, .png | OCR with vision model |\n| Audio | .mp3, .wav | Transcription |\n| ZIP | .zip | Processes contained files |\n\n### Basic Usage\n\n#### Python API\n```python\nfrom markitdown import MarkItDown\n\n# Simple conversion\nmd = MarkItDown()\nresult = md.convert(\"document.docx\")\n\n# Access content\nmarkdown_text = result.text_content\n\n# With options\nmd = MarkItDown(\n    llm_client=None,      # Optional LLM for enhanced processing\n    llm_model=None        # Model name if using LLM\n)\n```\n\n#### Command Line\n```bash\n# Install\npip install markitdown\n\n# Convert file\nmarkitdown document.docx > output.md\n\n# Or with output file\nmarkitdown document.docx -o output.md\n```\n\n### Word Document Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\n\n# Convert Word document\nresult = md.convert(\"report.docx\")\n\n# Output preserves:\n# - Headings (as # headers)\n# - Bold\u002Fitalic formatting\n# - Lists (bulleted and numbered)\n# - Tables (as markdown tables)\n# - Hyperlinks\n\nprint(result.text_content)\n```\n\n**Example Output:**\n```markdown\n# Annual Report 2024\n\n## Executive Summary\n\nThis report summarizes the key achievements and challenges...\n\n### Key Metrics\n\n| Metric | 2023 | 2024 | Change |\n|--------|------|------|--------|\n| Revenue | $10M | $12M | +20% |\n| Users | 50K | 75K | +50% |\n\n## Detailed Analysis\n\nThe following sections provide...\n```\n\n### Excel Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\nresult = md.convert(\"data.xlsx\")\n\n# Each sheet becomes a section\n# Data becomes markdown tables\nprint(result.text_content)\n```\n\n**Example Output:**\n```markdown\n## Sheet1\n\n| Name | Department | Salary |\n|------|------------|--------|\n| John | Engineering | $80,000 |\n| Jane | Marketing | $75,000 |\n\n## Sheet2\n\n| Product | Q1 | Q2 | Q3 | Q4 |\n|---------|----|----|----|----|\n| Widget A | 100 | 120 | 150 | 180 |\n```\n\n### PowerPoint Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\nresult = md.convert(\"presentation.pptx\")\n\n# Each slide becomes a section\n# Speaker notes included if present\nprint(result.text_content)\n```\n\n**Example Output:**\n```markdown\n# Slide 1: Company Overview\n\nOur mission is to...\n\n## Key Points\n- Innovation first\n- Customer focused\n- Global reach\n\n---\n\n# Slide 2: Market Analysis\n\nThe market opportunity is significant...\n\n**Notes:** Mention the competitor analysis here\n```\n\n### PDF Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\nresult = md.convert(\"document.pdf\")\n\n# Extracts text content\n# Tables converted where detected\nprint(result.text_content)\n```\n\n### Image Conversion (with Vision Model)\n\n```python\nfrom markitdown import MarkItDown\nimport anthropic\n\n# Use Claude for image description\nclient = anthropic.Anthropic()\n\nmd = MarkItDown(\n    llm_client=client,\n    llm_model=\"claude-sonnet-4-20250514\"\n)\n\nresult = md.convert(\"diagram.png\")\nprint(result.text_content)\n\n# Output: Description of the image content\n```\n\n### Batch Conversion\n\n```python\nfrom markitdown import MarkItDown\nfrom pathlib import Path\n\ndef batch_convert(input_dir, output_dir):\n    \"\"\"Convert all Office files to Markdown.\"\"\"\n    md = MarkItDown()\n    input_path = Path(input_dir)\n    output_path = Path(output_dir)\n    output_path.mkdir(exist_ok=True)\n    \n    extensions = ['.docx', '.xlsx', '.pptx', '.pdf']\n    \n    for ext in extensions:\n        for file in input_path.glob(f'*{ext}'):\n            try:\n                result = md.convert(str(file))\n                output_file = output_path \u002F f\"{file.stem}.md\"\n                \n                with open(output_file, 'w') as f:\n                    f.write(result.text_content)\n                \n                print(f\"Converted: {file.name}\")\n            except Exception as e:\n                print(f\"Error converting {file.name}: {e}\")\n\nbatch_convert('.\u002Fdocuments', '.\u002Fmarkdown')\n```\n\n## Best Practices\n\n1. **Check Output Quality**: Review converted Markdown for accuracy\n2. **Handle Tables**: Complex tables may need manual adjustment\n3. **Preserve Structure**: Use consistent heading levels in source docs\n4. **Image Handling**: Consider using vision models for important images\n5. **Version Control**: Store converted Markdown in Git for tracking\n\n## Common Patterns\n\n### Document Archive\n```python\nimport os\nfrom datetime import datetime\nfrom markitdown import MarkItDown\n\ndef archive_document(doc_path, archive_dir):\n    \"\"\"Convert and archive Office document to Markdown.\"\"\"\n    md = MarkItDown()\n    result = md.convert(doc_path)\n    \n    # Create archive structure\n    date_str = datetime.now().strftime('%Y-%m-%d')\n    filename = os.path.basename(doc_path)\n    base_name = os.path.splitext(filename)[0]\n    \n    # Save with metadata\n    output_content = f\"\"\"---\nsource: {filename}\nconverted: {date_str}\n---\n\n{result.text_content}\n\"\"\"\n    \n    output_path = os.path.join(archive_dir, f\"{base_name}.md\")\n    with open(output_path, 'w') as f:\n        f.write(output_content)\n    \n    return output_path\n```\n\n### AI-Ready Corpus\n```python\nfrom markitdown import MarkItDown\nfrom pathlib import Path\nimport json\n\ndef create_ai_corpus(doc_folder, output_file):\n    \"\"\"Convert documents to JSON corpus for AI training\u002FRAG.\"\"\"\n    md = MarkItDown()\n    corpus = []\n    \n    for doc in Path(doc_folder).glob('**\u002F*'):\n        if doc.suffix in ['.docx', '.pdf', '.pptx', '.xlsx']:\n            try:\n                result = md.convert(str(doc))\n                corpus.append({\n                    'source': str(doc),\n                    'filename': doc.name,\n                    'content': result.text_content,\n                    'type': doc.suffix[1:]\n                })\n            except Exception as e:\n                print(f\"Skipped {doc.name}: {e}\")\n    \n    with open(output_file, 'w') as f:\n        json.dump(corpus, f, indent=2)\n    \n    print(f\"Created corpus with {len(corpus)} documents\")\n    return corpus\n```\n\n## Examples\n\n### Example 1: Convert Documentation Suite\n```python\nfrom markitdown import MarkItDown\nfrom pathlib import Path\n\ndef convert_docs_to_wiki(docs_folder, wiki_folder):\n    \"\"\"Convert all Office docs to markdown wiki structure.\"\"\"\n    md = MarkItDown()\n    docs_path = Path(docs_folder)\n    wiki_path = Path(wiki_folder)\n    \n    # Create wiki structure\n    wiki_path.mkdir(exist_ok=True)\n    \n    # Create index\n    index_content = \"# Documentation Index\\n\\n\"\n    \n    for doc in sorted(docs_path.glob('**\u002F*.docx')):\n        try:\n            result = md.convert(str(doc))\n            \n            # Create relative path in wiki\n            rel_path = doc.relative_to(docs_path)\n            output_file = wiki_path \u002F rel_path.with_suffix('.md')\n            output_file.parent.mkdir(parents=True, exist_ok=True)\n            \n            # Write markdown\n            with open(output_file, 'w') as f:\n                f.write(result.text_content)\n            \n            # Add to index\n            link = str(rel_path.with_suffix('.md')).replace('\\\\', '\u002F')\n            index_content += f\"- [{doc.stem}]({link})\\n\"\n            \n            print(f\"Converted: {doc.name}\")\n            \n        except Exception as e:\n            print(f\"Error: {doc.name} - {e}\")\n    \n    # Write index\n    with open(wiki_path \u002F 'index.md', 'w') as f:\n        f.write(index_content)\n\nconvert_docs_to_wiki('.\u002Fcompany_docs', '.\u002Fwiki')\n```\n\n### Example 2: Meeting Notes Processor\n```python\nfrom markitdown import MarkItDown\nimport re\nfrom datetime import datetime\n\ndef process_meeting_notes(pptx_path):\n    \"\"\"Extract and structure meeting notes from PowerPoint.\"\"\"\n    md = MarkItDown()\n    result = md.convert(pptx_path)\n    \n    # Parse the markdown\n    content = result.text_content\n    \n    # Extract sections\n    sections = {\n        'attendees': [],\n        'agenda': [],\n        'decisions': [],\n        'action_items': []\n    }\n    \n    current_section = None\n    \n    for line in content.split('\\n'):\n        line_lower = line.lower()\n        \n        if 'attendee' in line_lower or 'participant' in line_lower:\n            current_section = 'attendees'\n        elif 'agenda' in line_lower:\n            current_section = 'agenda'\n        elif 'decision' in line_lower:\n            current_section = 'decisions'\n        elif 'action' in line_lower:\n            current_section = 'action_items'\n        elif line.strip().startswith(('-', '*', '•')) and current_section:\n            sections[current_section].append(line.strip()[1:].strip())\n    \n    # Generate structured output\n    output = f\"\"\"# Meeting Notes\n\n**Date:** {datetime.now().strftime('%Y-%m-%d')}\n**Source:** {pptx_path}\n\n## Attendees\n{chr(10).join('- ' + a for a in sections['attendees'])}\n\n## Agenda\n{chr(10).join('- ' + a for a in sections['agenda'])}\n\n## Decisions Made\n{chr(10).join('- ' + d for d in sections['decisions'])}\n\n## Action Items\n{chr(10).join('- [ ] ' + a for a in sections['action_items'])}\n\"\"\"\n    \n    return output\n\nnotes = process_meeting_notes('team_meeting.pptx')\nprint(notes)\n```\n\n### Example 3: Excel to Documentation\n```python\nfrom markitdown import MarkItDown\n\ndef excel_to_data_dictionary(xlsx_path):\n    \"\"\"Convert Excel data model to data dictionary documentation.\"\"\"\n    md = MarkItDown()\n    result = md.convert(xlsx_path)\n    \n    # Add documentation structure\n    doc = f\"\"\"# Data Dictionary\n\nGenerated from: `{xlsx_path}`\n\n{result.text_content}\n\n## Usage Notes\n\n- All tables are derived from the source Excel file\n- Review data types and constraints before use\n- Contact data team for clarifications\n\n## Change Log\n\n| Date | Change | Author |\n|------|--------|--------|\n| {datetime.now().strftime('%Y-%m-%d')} | Initial generation | Auto |\n\"\"\"\n    \n    return doc\n\ndocumentation = excel_to_data_dictionary('data_model.xlsx')\nwith open('data_dictionary.md', 'w') as f:\n    f.write(documentation)\n```\n\n## Limitations\n\n- Complex formatting may be simplified\n- Images are not embedded (use vision model for descriptions)\n- Some table structures may not convert perfectly\n- Track changes in Word are not preserved\n- Comments may not be extracted\n\n## Installation\n\n```bash\npip install markitdown\n\n# For image\u002Faudio processing\npip install markitdown[all]\n\n# For specific features\npip install markitdown[images]  # Image OCR\npip install markitdown[audio]   # Audio transcription\n```\n\n## Resources\n\n- [GitHub Repository](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmarkitdown)\n- [PyPI Package](https:\u002F\u002Fpypi.org\u002Fproject\u002Fmarkitdown\u002F)\n- [Supported Formats](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmarkitdown#supported-formats)\n","# Office to Markdown Skill\n\n## Overview\n\nThis skill enables conversion from various Office formats to Markdown using **markitdown** - Microsoft's open-source tool for converting documents to Markdown. Perfect for making Office content searchable, version-controllable, and AI-friendly.\n\n## How to Use\n\n1. Provide the Office file (Word, Excel, PowerPoint, PDF, etc.)\n2. Optionally specify conversion options\n3. I'll convert it to clean Markdown\n\n**Example prompts:**\n- \"Convert this Word document to Markdown\"\n- \"Turn this PowerPoint into Markdown notes\"\n- \"Extract content from this PDF as Markdown\"\n- \"Convert this Excel file to Markdown tables\"\n\n## Domain Knowledge\n\n### markitdown Fundamentals\n\n```python\nfrom markitdown import MarkItDown\n\n# Initialize converter\nmd = MarkItDown()\n\n# Convert file\nresult = md.convert(\"document.docx\")\nprint(result.text_content)\n\n# Save to file\nwith open(\"output.md\", \"w\") as f:\n    f.write(result.text_content)\n```\n\n### Supported Formats\n\n| Format | Extension | Notes |\n|--------|-----------|-------|\n| Word | .docx | Full text, tables, basic formatting |\n| Excel | .xlsx | Converts to Markdown tables |\n| PowerPoint | .pptx | Slides as sections |\n| PDF | .pdf | Text extraction |\n| HTML | .html | Clean markdown |\n| Images | .jpg, .png | OCR with vision model |\n| Audio | .mp3, .wav | Transcription |\n| ZIP | .zip | Processes contained files |\n\n### Basic Usage\n\n#### Python API\n```python\nfrom markitdown import MarkItDown\n\n# Simple conversion\nmd = MarkItDown()\nresult = md.convert(\"document.docx\")\n\n# Access content\nmarkdown_text = result.text_content\n\n# With options\nmd = MarkItDown(\n    llm_client=None,      # Optional LLM for enhanced processing\n    llm_model=None        # Model name if using LLM\n)\n```\n\n#### Command Line\n```bash\n# Install\npip install markitdown\n\n# Convert file\nmarkitdown document.docx > output.md\n\n# Or with output file\nmarkitdown document.docx -o output.md\n```\n\n### Word Document Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\n\n# Convert Word document\nresult = md.convert(\"report.docx\")\n\n# Output preserves:\n# - Headings (as # headers)\n# - Bold\u002Fitalic formatting\n# - Lists (bulleted and numbered)\n# - Tables (as markdown tables)\n# - Hyperlinks\n\nprint(result.text_content)\n```\n\n**Example Output:**\n```markdown\n# Annual Report 2024\n\n## Executive Summary\n\nThis report summarizes the key achievements and challenges...\n\n### Key Metrics\n\n| Metric | 2023 | 2024 | Change |\n|--------|------|------|--------|\n| Revenue | $10M | $12M | +20% |\n| Users | 50K | 75K | +50% |\n\n## Detailed Analysis\n\nThe following sections provide...\n```\n\n### Excel Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\nresult = md.convert(\"data.xlsx\")\n\n# Each sheet becomes a section\n# Data becomes markdown tables\nprint(result.text_content)\n```\n\n**Example Output:**\n```markdown\n## Sheet1\n\n| Name | Department | Salary |\n|------|------------|--------|\n| John | Engineering | $80,000 |\n| Jane | Marketing | $75,000 |\n\n## Sheet2\n\n| Product | Q1 | Q2 | Q3 | Q4 |\n|---------|----|----|----|----|\n| Widget A | 100 | 120 | 150 | 180 |\n```\n\n### PowerPoint Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\nresult = md.convert(\"presentation.pptx\")\n\n# Each slide becomes a section\n# Speaker notes included if present\nprint(result.text_content)\n```\n\n**Example Output:**\n```markdown\n# Slide 1: Company Overview\n\nOur mission is to...\n\n## Key Points\n- Innovation first\n- Customer focused\n- Global reach\n\n---\n\n# Slide 2: Market Analysis\n\nThe market opportunity is significant...\n\n**Notes:** Mention the competitor analysis here\n```\n\n### PDF Conversion\n\n```python\nfrom markitdown import MarkItDown\n\nmd = MarkItDown()\nresult = md.convert(\"document.pdf\")\n\n# Extracts text content\n# Tables converted where detected\nprint(result.text_content)\n```\n\n### Image Conversion (with Vision Model)\n\n```python\nfrom markitdown import MarkItDown\nimport anthropic\n\n# Use Claude for image description\nclient = anthropic.Anthropic()\n\nmd = MarkItDown(\n    llm_client=client,\n    llm_model=\"claude-sonnet-4-20250514\"\n)\n\nresult = md.convert(\"diagram.png\")\nprint(result.text_content)\n\n# Output: Description of the image content\n```\n\n### Batch Conversion\n\n```python\nfrom markitdown import MarkItDown\nfrom pathlib import Path\n\ndef batch_convert(input_dir, output_dir):\n    \"\"\"Convert all Office files to Markdown.\"\"\"\n    md = MarkItDown()\n    input_path = Path(input_dir)\n    output_path = Path(output_dir)\n    output_path.mkdir(exist_ok=True)\n    \n    extensions = ['.docx', '.xlsx', '.pptx', '.pdf']\n    \n    for ext in extensions:\n        for file in input_path.glob(f'*{ext}'):\n            try:\n                result = md.convert(str(file))\n                output_file = output_path \u002F f\"{file.stem}.md\"\n                \n                with open(output_file, 'w') as f:\n                    f.write(result.text_content)\n                \n                print(f\"Converted: {file.name}\")\n            except Exception as e:\n                print(f\"Error converting {file.name}: {e}\")\n\nbatch_convert('.\u002Fdocuments', '.\u002Fmarkdown')\n```\n\n## Best Practices\n\n1. **Check Output Quality**: Review converted Markdown for accuracy\n2. **Handle Tables**: Complex tables may need manual adjustment\n3. **Preserve Structure**: Use consistent heading levels in source docs\n4. **Image Handling**: Consider using vision models for important images\n5. **Version Control**: Store converted Markdown in Git for tracking\n\n## Common Patterns\n\n### Document Archive\n```python\nimport os\nfrom datetime import datetime\nfrom markitdown import MarkItDown\n\ndef archive_document(doc_path, archive_dir):\n    \"\"\"Convert and archive Office document to Markdown.\"\"\"\n    md = MarkItDown()\n    result = md.convert(doc_path)\n    \n    # Create archive structure\n    date_str = datetime.now().strftime('%Y-%m-%d')\n    filename = os.path.basename(doc_path)\n    base_name = os.path.splitext(filename)[0]\n    \n    # Save with metadata\n    output_content = f\"\"\"---\nsource: {filename}\nconverted: {date_str}\n---\n\n{result.text_content}\n\"\"\"\n    \n    output_path = os.path.join(archive_dir, f\"{base_name}.md\")\n    with open(output_path, 'w') as f:\n        f.write(output_content)\n    \n    return output_path\n```\n\n### AI-Ready Corpus\n```python\nfrom markitdown import MarkItDown\nfrom pathlib import Path\nimport json\n\ndef create_ai_corpus(doc_folder, output_file):\n    \"\"\"Convert documents to JSON corpus for AI training\u002FRAG.\"\"\"\n    md = MarkItDown()\n    corpus = []\n    \n    for doc in Path(doc_folder).glob('**\u002F*'):\n        if doc.suffix in ['.docx', '.pdf', '.pptx', '.xlsx']:\n            try:\n                result = md.convert(str(doc))\n                corpus.append({\n                    'source': str(doc),\n                    'filename': doc.name,\n                    'content': result.text_content,\n                    'type': doc.suffix[1:]\n                })\n            except Exception as e:\n                print(f\"Skipped {doc.name}: {e}\")\n    \n    with open(output_file, 'w') as f:\n        json.dump(corpus, f, indent=2)\n    \n    print(f\"Created corpus with {len(corpus)} documents\")\n    return corpus\n```\n\n## Examples\n\n### Example 1: Convert Documentation Suite\n```python\nfrom markitdown import MarkItDown\nfrom pathlib import Path\n\ndef convert_docs_to_wiki(docs_folder, wiki_folder):\n    \"\"\"Convert all Office docs to markdown wiki structure.\"\"\"\n    md = MarkItDown()\n    docs_path = Path(docs_folder)\n    wiki_path = Path(wiki_folder)\n    \n    # Create wiki structure\n    wiki_path.mkdir(exist_ok=True)\n    \n    # Create index\n    index_content = \"# Documentation Index\\n\\n\"\n    \n    for doc in sorted(docs_path.glob('**\u002F*.docx')):\n        try:\n            result = md.convert(str(doc))\n            \n            # Create relative path in wiki\n            rel_path = doc.relative_to(docs_path)\n            output_file = wiki_path \u002F rel_path.with_suffix('.md')\n            output_file.parent.mkdir(parents=True, exist_ok=True)\n            \n            # Write markdown\n            with open(output_file, 'w') as f:\n                f.write(result.text_content)\n            \n            # Add to index\n            link = str(rel_path.with_suffix('.md')).replace('\\\\', '\u002F')\n            index_content += f\"- [{doc.stem}]({link})\\n\"\n            \n            print(f\"Converted: {doc.name}\")\n            \n        except Exception as e:\n            print(f\"Error: {doc.name} - {e}\")\n    \n    # Write index\n    with open(wiki_path \u002F 'index.md', 'w') as f:\n        f.write(index_content)\n\nconvert_docs_to_wiki('.\u002Fcompany_docs', '.\u002Fwiki')\n```\n\n### Example 2: Meeting Notes Processor\n```python\nfrom markitdown import MarkItDown\nimport re\nfrom datetime import datetime\n\ndef process_meeting_notes(pptx_path):\n    \"\"\"Extract and structure meeting notes from PowerPoint.\"\"\"\n    md = MarkItDown()\n    result = md.convert(pptx_path)\n    \n    # Parse the markdown\n    content = result.text_content\n    \n    # Extract sections\n    sections = {\n        'attendees': [],\n        'agenda': [],\n        'decisions': [],\n        'action_items': []\n    }\n    \n    current_section = None\n    \n    for line in content.split('\\n'):\n        line_lower = line.lower()\n        \n        if 'attendee' in line_lower or 'participant' in line_lower:\n            current_section = 'attendees'\n        elif 'agenda' in line_lower:\n            current_section = 'agenda'\n        elif 'decision' in line_lower:\n            current_section = 'decisions'\n        elif 'action' in line_lower:\n            current_section = 'action_items'\n        elif line.strip().startswith(('-', '*', '•')) and current_section:\n            sections[current_section].append(line.strip()[1:].strip())\n    \n    # Generate structured output\n    output = f\"\"\"# Meeting Notes\n\n**Date:** {datetime.now().strftime('%Y-%m-%d')}\n**Source:** {pptx_path}\n\n## Attendees\n{chr(10).join('- ' + a for a in sections['attendees'])}\n\n## Agenda\n{chr(10).join('- ' + a for a in sections['agenda'])}\n\n## Decisions Made\n{chr(10).join('- ' + d for d in sections['decisions'])}\n\n## Action Items\n{chr(10).join('- [ ] ' + a for a in sections['action_items'])}\n\"\"\"\n    \n    return output\n\nnotes = process_meeting_notes('team_meeting.pptx')\nprint(notes)\n```\n\n### Example 3: Excel to Documentation\n```python\nfrom markitdown import MarkItDown\n\ndef excel_to_data_dictionary(xlsx_path):\n    \"\"\"Convert Excel data model to data dictionary documentation.\"\"\"\n    md = MarkItDown()\n    result = md.convert(xlsx_path)\n    \n    # Add documentation structure\n    doc = f\"\"\"# Data Dictionary\n\nGenerated from: `{xlsx_path}`\n\n{result.text_content}\n\n## Usage Notes\n\n- All tables are derived from the source Excel file\n- Review data types and constraints before use\n- Contact data team for clarifications\n\n## Change Log\n\n| Date | Change | Author |\n|------|--------|--------|\n| {datetime.now().strftime('%Y-%m-%d')} | Initial generation | Auto |\n\"\"\"\n    \n    return doc\n\ndocumentation = excel_to_data_dictionary('data_model.xlsx')\nwith open('data_dictionary.md', 'w') as f:\n    f.write(documentation)\n```\n\n## Limitations\n\n- Complex formatting may be simplified\n- Images are not embedded (use vision model for descriptions)\n- Some table structures may not convert perfectly\n- Track changes in Word are not preserved\n- Comments may not be extracted\n\n## Installation\n\n```bash\npip install markitdown\n\n# For image\u002Faudio processing\npip install markitdown[all]\n\n# For specific features\npip install markitdown[images]  # Image OCR\npip install markitdown[audio]   # Audio transcription\n```\n\n## Resources\n\n- [GitHub Repository](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmarkitdown)\n- [PyPI Package](https:\u002F\u002Fpypi.org\u002Fproject\u002Fmarkitdown\u002F)\n- [Supported Formats](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmarkitdown#supported-formats)\n",{"name":5,"tags":54,"tools":55,"author":58,"models":59,"library":62,"version":65,"description":7},[39,34,31,46,30],[36,56,57],"code_execution","file_operations","claude-office-skills",[60,61],"claude-sonnet-4","claude-opus-4",{"url":63,"name":31,"stars":64},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fmarkitdown","86k","1.0","main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","PDF及文件\u002Foffice-to-md",1,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification","https:\u002F\u002Fgithub.com\u002FKernel8901","a little little little dobe in life but science geek","2026-04-05 16:43:56",{"source":8,"skillName":5,"commands":75,"prompt":85,"zipAvailable":86},[76,79,82],{"tool":77,"command":78},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill office-to-md",{"tool":80,"command":81},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill office-to-md",{"tool":83,"command":84},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill office-to-md","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Foffice-to-md\u002FSKILL.md",true,[88],{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"_meta.json","REFERENCE","参考文档",284,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Foffice-to-md\u002F_meta.json",[95,119,153,164,174,203],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":49},"01M6Q5R6WZ06RRB9RQTW54B34B","zyfai","Earn yield on any Ethereum wallet on Base, Arbitrum, and Plasma. Use when a user wants passive DeFi yield on their funds. Deploys a non-custodial subaccount (Safe) linked to their EOA, enables automated yield optimization, and lets them deposit\u002Fwithdraw anytime.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzyfai-sdk\u002FSKILL.md",[],[97,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118],"safe","ethereum","defi","Optimization","user","use","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":135,"publishedAt":49},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[124,127,130],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":128,"categoryName":129,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":131,"categoryName":132,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[136,137,138,139,140,141,142,104,143,108,144,145,146,147,148,149,150,151,152],"api","zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","token","prices",{"skillNo":154,"name":155,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":161,"publishedAt":49},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[158,159,160],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":128,"categoryName":129,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":131,"categoryName":132,"taxonomyType":133,"taxonomyTypeDesc":134},[136,162,163,137,138,139,140,141,142,104,143,108,145,146,147,148,149,150,151,152],"api skill","zerion api skill",{"skillNo":165,"name":166,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":172,"publishedAt":49},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[169,170,171],{"categoryNo":125,"categoryName":126,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":128,"categoryName":129,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":131,"categoryName":132,"taxonomyType":133,"taxonomyTypeDesc":134},[139,136,173,137,138,140,141,104,143,108,144,145,146,147,148,149,150,151,152],"zerion api mcp",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":183,"publishedAt":49},"01M6Q5QQYZB7A501BDEQWKGSJT","yahoo-finance-forex","Fetches real-time FOREX news and market data from Yahoo Finance for major currency pairs (EUR\u002FUSD, GBP\u002FUSD, USD\u002FJPY, etc.). Analyzes sentiment and provides trading context.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-forex\u002FSKILL.md",[180],{"categoryNo":181,"categoryName":182,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000040","财务",[184,185,186,187,188,47,189,190,191,192,193,194,195,196,197,198,199,200,201,202],"finance","yahoo finance","forex","yahoo","yahoo finance forex","https","sentiment","real-time","python3","install","Market","usd","news","time","currency","gbp","pip","market data","for",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":210,"publishedAt":49},"01M6Q5QM6VS84WZVM7BKXXPF32","yahoo-finance","This skill should be used when the user asks to \"get stock prices\", \"check stock quotes\", \"look up earnings\", \"get financial data\", \"find trending stocks\", or needs stock market data from Yahoo Finance.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-cli\u002FSKILL.md",[209],{"categoryNo":181,"categoryName":182,"taxonomyType":133,"taxonomyTypeDesc":134},[184,185,187,211,212,213,214,215,216,194,217,218,219,220,221,222,223,224,152,201],"cli","homebrew","find","check","brew","up","local","get","stock","link","trending","sf","quotes","ln"]