Token导航 LogoToken导航TokenDH.com
效率执行命令clawhub未标认证来源可访问clear审计通过

word-studio文字工作室

Agent Skill

word-studio 用于整理文档、README、Markdown 和说明材料,适合在 OpenClaw 中需要把零散信息整理成结构清晰的文档时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

4,751

周安装

202

GitHub Stars

公开资料未说明

下载量

1,664
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:word-studio(文字工作室)
来源仓库:https://github.com/tobewin/word-studio
安装命令:
openclaw skills install word-studio
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install word-studio

简介

专业级 Word 文档生成器,支持报告、合同、简历等多种商务文体模板。

  • 适合市场营销、人力资源等部门快速产出标准化对外沟通材料。
  • 集成变量替换引擎,可从数据库或配置文件动态填充客户个性化字段。
  • 依赖 .NET Framework 运行环境,Linux/macOS 用户需借助 Wine 兼容层运行。
  • 商业用途请确认许可证条款,开源版本禁止用于盈利性项目分发。

SKILL.md

name
word-studio
description
Professional Word document generator. Use when user needs to create reports, papers, contracts, resumes, or any professional document. Supports docx/doc formats, charts, images, tables, TOC, and multi-language. Generates publication-ready documents. Word文档生成、专业报告、论文模板、合同制作。
version
1.0.3
license
MIT-0
metadata
{"openclaw": {"emoji": "📄", "requires": {"bins": ["python3"]}}}
dependencies
pip install python-docx pillow

Word Studio

Professional Word document generator that creates publication-ready documents in docx/doc formats.

Features

  • 📄 Multi-Format: Output as .docx or .doc
  • 🎨 Professional Templates: 20+ document types
  • 📊 Charts & Tables: Embedded Excel-style data
  • 🖼️ Image Support: Insert images with professional layout
  • 📑 Auto TOC: Generate table of contents
  • 🌍 Multi-Language: Chinese, English, Japanese, Korean, etc.
  • WPS/Office Compatible: Works everywhere
  • 📐 Smart Layout: Auto-adjust for different content types

Trigger Conditions

  • "帮我写一份报告" / "Write a report for me"
  • "生成Word文档" / "Generate Word document"
  • "制作一份简历" / "Create a resume"
  • "写论文" / "Write a paper"
  • "制作标书" / "Create a bid document"
  • "写工作总结" / "Write work summary"
  • "生成会议纪要" / "Generate meeting minutes"
  • "word-studio"

Document Types

Business (商务)

  • 工作报告(周报/月报/年报)
  • 项目计划书
  • 商业计划书
  • 投标书/标书
  • 商务合同
  • 会议纪要

Academic (学术)

  • 学术论文
  • 开题报告
  • 毕业论文
  • 实验报告
  • 文献综述
  • 研究计划

Government (公文)

  • 通知公告
  • 请示报告
  • 函件
  • 会议纪要
  • 工作总结
  • 调研报告

Personal (个人)

  • 中文简历
  • 英文简历
  • 求职信
  • 自我介绍
  • 个人陈述

Legal (法律)

  • 合同协议
  • 授权委托书
  • 法律意见书
  • 起诉状
  • 公证书

Financial (财务)

  • 财务报告
  • 审计报告
  • 预算方案
  • 投资分析
  • 尽职调查报告

Step 1: Understand User Requirements

请提供以下信息:

文档类型:(报告/论文/简历/合同/其他)
文档标题:
主要内容:
格式要求:(docx/doc)
语言:(中文/英文)
特殊要求:(图表/目录/页眉页脚等)

Step 2: Generate Document

Python Script Template

python3 << 'PYEOF'
from docx import Document
from docx.shared import Inches, Pt, Cm, RGBColor, Emu
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.section import WD_ORIENT
import os

def create_cover_page(doc, config):
    """Create professional cover page with vertical centering"""
    
    section = doc.sections[0]
    page_height = section.page_height
    page_width = section.page_width
    
    # 创建单列表格用于垂直居中
    table = doc.add_table(rows=1, cols=1)
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    
    # 设置表格高度为页面高度(减去边距)
    table_row = table.rows[0]
    table_row.height = page_height - section.top_margin - section.bottom_margin
    
    # 获取单元格
    cell = table.cell(0, 0)
    
    # 添加标题
    title_para = cell.paragraphs[0]
    title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    title_run = title_para.add_run(config['title'])
    title_run.font.size = Pt(26)
    title_run.font.bold = True
    title_run.font.name = '黑体'
    
    # 添加空行
    cell.add_paragraph()
    
    # 添加副标题
    if 'subtitle' in config:
        subtitle_para = cell.add_paragraph()
        subtitle_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        subtitle_run = subtitle_para.add_run(config['subtitle'])
        subtitle_run.font.size = Pt(16)
        subtitle_run.font.color.rgb = RGBColor(100, 100, 100)
        subtitle_run.font.name = '宋体'
    
    # 添加空行
    cell.add_paragraph()
    cell.add_paragraph()
    
    # 添加作者信息
    if 'author' in config:
        author_para = cell.add_paragraph()
        author_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        author_run = author_para.add_run(config['author'])
        author_run.font.size = Pt(14)
        author_run.font.name = '宋体'
    
    # 添加空行
    cell.add_paragraph()
    
    # 添加日期
    from datetime import datetime
    date_para = cell.add_paragraph()
    date_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    date_run = date_para.add_run(datetime.now().strftime("%Y年%m月%d日"))
    date_run.font.size = Pt(14)
    date_run.font.name = '宋体'
    
    # 隐藏表格边框
    from docx.oxml.ns import qn
    from docx.oxml import OxmlElement
    
    tbl = table._tbl
    tblPr = tbl.tblPr if tbl.tblPr is not None else OxmlElement('w:tblPr')
    borders = OxmlElement('w:tblBorders')
    for border_name in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']:
        border = OxmlElement(f'w:{border_name}')
        border.set(qn('w:val'), 'none')
        border.set(qn('w:sz'), '0')
        border.set(qn('w:space'), '0')
        border.set(qn('w:color'), 'auto')
        borders.append(border)
    tblPr.append(borders)
    
    return doc
    
    # 添加目录占位符
    if config.get('toc', False):
        toc_heading = doc.add_heading('目录', level=1)
        toc_para = doc.add_paragraph('(请在Word中右键此处,选择"更新域"生成目录)')
        doc.add_page_break()
    
    # 添加正文内容
    for section_data in config.get('sections', []):
        # 添加章节标题
        doc.add_heading(section_data['title'], level=1)
        
        # 添加段落内容
        for para in section_data.get('paragraphs', []):
            p = doc.add_paragraph(para)
            p.paragraph_format.first_line_indent = Cm(0.74)  # 首行缩进2字符
            p.paragraph_format.line_spacing = 1.5  # 1.5倍行距
        
        # 添加表格(如有)
        if 'table' in section_data:
            table_data = section_data['table']
            table = doc.add_table(rows=len(table_data), cols=len(table_data[0]))
            table.style = 'Table Grid'
            table.alignment = WD_TABLE_ALIGNMENT.CENTER
            
            for i, row_data in enumerate(table_data):
                for j, cell_text in enumerate(row_data):
                    table.cell(i, j).text = str(cell_text)
        
        # 添加图片(如有)
        if 'image' in section_data:
            img_path = section_data['image']
            if os.path.exists(img_path):
                doc.add_picture(img_path, width=Inches(5))
                last_paragraph = doc.paragraphs[-1]
                last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
        
        # 添加图表(如有)
        if 'chart' in section_data:
            chart_info = section_data['chart']
            doc.add_paragraph(f"【图表:{chart_info['title']}】")
    
    # 添加页眉页脚
    if config.get('header', False):
        header = section.header
        header_para = header.paragraphs[0]
        header_para.text = config.get('header_text', '')
        header_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    if config.get('footer', False):
        footer = section.footer
        footer_para = footer.paragraphs[0]
        footer_para.text = config.get('footer_text', '')
        footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    return doc

def save_document(doc, output_path, format='docx'):
    """Save document in specified format"""
    
    if format == 'doc':
        # docx转doc需要LibreOffice
        docx_path = output_path.replace('.doc', '.docx')
        doc.save(docx_path)
        
        # 尝试使用LibreOffice转换
        import subprocess
        try:
            subprocess.run([
                'soffice', '--headless', '--convert-to', 'doc',
                '--outdir', os.path.dirname(output_path),
                docx_path
            ], check=True, timeout=30)
            os.remove(docx_path)  # 删除临时docx
            return output_path
        except:
            # 如果LibreOffice不可用,返回docx
            final_path = output_path.replace('.doc', '.docx')
            os.rename(docx_path, final_path)
            return final_path
    else:
        doc.save(output_path)
        return output_path

# 示例配置
config = {
    'title': '示例文档标题',
    'subtitle': '副标题',
    'author': '作者姓名',
    'toc': True,
    'header': True,
    'header_text': '公司名称',
    'footer': True,
    'footer_text': '第 {PAGE} 页',
    'sections': [
        {
            'title': '第一章 引言',
            'paragraphs': [
                '这是第一段内容,需要首行缩进两个字符。',
                '这是第二段内容,继续阐述相关内容。'
            ]
        },
        {
            'title': '第二章 数据分析',
            'paragraphs': ['本章展示相关数据。'],
            'table': [
                ['项目', 'Q1', 'Q2', 'Q3', 'Q4'],
                ['销售额', '100', '150', '200', '250'],
                ['增长率', '10%', '50%', '33%', '25%']
            ]
        }
    ]
}

# 生成文档
output_dir = os.environ.get('OPENCLAW_WORKSPACE', os.getcwd())
output_path = os.path.join(output_dir, 'document.docx')

doc = create_document(config)
final_path = save_document(doc, output_path, 'docx')

print(f"✅ 文档已生成:{final_path}")
PYEOF

Template Library

1. 工作报告模板

WORK_REPORT = {
    'title': '2026年度工作总结报告',
    'toc': True,
    'header': True,
    'header_text': 'XX公司',
    'sections': [
        {'title': '一、工作概述', 'paragraphs': [...]},
        {'title': '二、主要工作内容', 'paragraphs': [...]},
        {'title': '三、工作成果', 'paragraphs': [...]},
        {'title': '四、存在问题', 'paragraphs': [...]},
        {'title': '五、下一步计划', 'paragraphs': [...]},
    ]
}

2. 学术论文模板

ACADEMIC_PAPER = {
    'title': '论文标题',
    'author': '作者姓名',
    'toc': True,
    'sections': [
        {'title': '摘要', 'paragraphs': [...]},
        {'title': '关键词', 'paragraphs': [...]},
        {'title': '1 引言', 'paragraphs': [...]},
        {'title': '2 文献综述', 'paragraphs': [...]},
        {'title': '3 研究方法', 'paragraphs': [...]},
        {'title': '4 结果与分析', 'paragraphs': [...]},
        {'title': '5 结论', 'paragraphs': [...]},
        {'title': '参考文献', 'paragraphs': [...]},
    ]
}

3. 商务合同模板

CONTRACT = {
    'title': '商务合同',
    'sections': [
        {'title': '第一条 合同双方', 'paragraphs': [...]},
        {'title': '第二条 合同标的', 'paragraphs': [...]},
        {'title': '第三条 价格与支付', 'paragraphs': [...]},
        {'title': '第四条 交付与验收', 'paragraphs': [...]},
        {'title': '第五条 违约责任', 'paragraphs': [...]},
        {'title': '第六条 争议解决', 'paragraphs': [...]},
    ]
}

4. 简历模板

RESUME = {
    'title': '个人简历',
    'sections': [
        {'title': '基本信息', 'paragraphs': [...]},
        {'title': '教育背景', 'paragraphs': [...]},
        {'title': '工作经历', 'paragraphs': [...]},
        {'title': '项目经验', 'paragraphs': [...]},
        {'title': '技能证书', 'paragraphs': [...]},
        {'title': '自我评价', 'paragraphs': [...]},
    ]
}

Font Configuration

Cross-Platform Font Strategy (跨平台字体策略)

优先使用开源免费字体,确保跨平台一致性:

字体名称类型语言许可证
Noto Sans无衬线全语言OFL (免费)
Noto Serif衬线全语言OFL (免费)
Noto Sans SC无衬线简体中文OFL (免费)
Noto Serif SC衬线简体中文OFL (免费)
Source Han Sans无衬线中日韩OFL (免费)
Source Han Serif衬线中日韩OFL (免费)
Liberation Sans无衬线拉丁OFL (免费)
Liberation Serif衬线拉丁OFL (免费)

Platform Font Mapping (平台字体映射)

def get_platform_fonts(platform, language):
    """Get fonts based on platform and language"""
    
    # 开源字体(首选,跨平台一致)
    OPEN_SOURCE_FONTS = {
        'body': {
            'zh': 'Noto Serif SC',
            'en': 'Liberation Serif',
            'ja': 'Noto Serif JP',
            'ko': 'Noto Serif KR',
            'default': 'Noto Serif'
        },
        'heading': {
            'zh': 'Noto Sans SC',
            'en': 'Liberation Sans',
            'ja': 'Noto Sans JP',
            'ko': 'Noto Sans KR',
            'default': 'Noto Sans'
        }
    }
    
    # 系统字体(回退方案)
    SYSTEM_FONTS = {
        'windows': {
            'body': {'zh': '宋体', 'en': 'Times New Roman'},
            'heading': {'zh': '黑体', 'en': 'Arial'}
        },
        'macos': {
            'body': {'zh': 'STSong', 'en': 'Times New Roman'},
            'heading': {'zh': 'STHeiti', 'en': 'Helvetica'}
        },
        'linux': {
            'body': {'zh': 'Noto Serif CJK SC', 'en': 'Liberation Serif'},
            'heading': {'zh': 'Noto Sans CJK SC', 'en': 'Liberation Sans'}
        }
    }
    
    # 优先使用开源字体
    body_font = OPEN_SOURCE_FONTS['body'].get(language, 
                 OPEN_SOURCE_FONTS['body']['default'])
    heading_font = OPEN_SOURCE_FONTS['heading'].get(language,
                   OPEN_SOURCE_FONTS['heading']['default'])
    
    return {
        'body': body_font,
        'heading': heading_font,
        'fallback': SYSTEM_FONTS.get(platform, SYSTEM_FONTS['linux'])
    }

Font Installation Check

def check_font_availability(font_name):
    """Check if font is available on system"""
    import subprocess
    import sys
    
    platform = sys.platform
    
    if platform == 'darwin':  # macOS
        result = subprocess.run(['fc-list', font_name], 
                              capture_output=True, text=True)
        return result.returncode == 0
    elif platform == 'win32':  # Windows
        import winreg
        try:
            key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 
                               r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts")
            return True
        except:
            return False
    else:  # Linux
        result = subprocess.run(['fc-list', f':family={font_name}'],
                              capture_output=True, text=True)
        return font_name in result.stdout

def get_available_font(preferred, fallbacks):
    """Get first available font from list"""
    for font in [preferred] + fallbacks:
        if check_font_availability(font):
            return font
    return 'serif'  # Ultimate fallback

Compatibility

WPS/Office Compatibility

✅ 使用标准OOXML格式
✅ 避免使用Office特有功能
✅ 图片嵌入而非链接
✅ 字体嵌入或回退机制
✅ 表格使用标准样式

Format Support

格式支持说明
.docx主要格式
.doc⚠️需要LibreOffice转换
.pdf⚠️需要额外转换
.odt⚠️需要额外转换

Error Handling

字体缺失       → 使用系统默认字体
图片不存在     → 跳过图片,添加占位符
格式转换失败   → 保留docx格式
内容为空       → 添加占位文本

Image Layout (图片排版)

Image Layout Modes (图片排版模式)

模式说明适用场景
居中图片水平居中单独展示的图片
左对齐图片靠左,文字环绕图文混排
右对齐图片靠右,文字环绕图文混排
全宽图片占满页面宽度大图展示
并排多张图片并排对比展示

Image Size Standards (图片尺寸标准)

IMAGE_SIZES = {
    'full_width': Inches(6.0),      # 全宽(A4减边距)
    'half_width': Inches(3.0),      # 半宽
    'third_width': Inches(2.0),     # 三分之一宽
    'quarter_width': Inches(1.5),   # 四分之一宽
    'thumbnail': Inches(1.0),       # 缩略图
}

Image Insertion Code (图片插入代码)

from docx.shared import Inches, Cm, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT

def add_image_centered(doc, image_path, width=None, caption=None):
    """Add centered image with optional caption"""
    
    # 添加图片
    if width:
        pic = doc.add_picture(image_path, width=width)
    else:
        pic = doc.add_picture(image_path)
    
    # 居中对齐
    last_paragraph = doc.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    # 添加图注
    if caption:
        caption_para = doc.add_paragraph()
        caption_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
        caption_run = caption_para.add_run(caption)
        caption_run.font.size = Pt(10)
        caption_run.font.color.rgb = RGBColor(128, 128, 128)
    
    return pic

def add_image_with_text_wrap(doc, image_path, position='left', width=Inches(2.5)):
    """Add image with text wrapping"""
    
    # 使用表格实现文字环绕效果
    table = doc.add_table(rows=1, cols=2)
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    
    if position == 'left':
        img_cell = table.cell(0, 0)
        text_cell = table.cell(0, 1)
    else:
        img_cell = table.cell(0, 1)
        text_cell = table.cell(0, 0)
    
    # 添加图片到单元格
    img_cell.paragraphs[0].add_run().add_picture(image_path, width=width)
    img_cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    # 隐藏表格边框
    from docx.oxml.ns import qn
    from docx.oxml import OxmlElement
    
    tbl = table._tbl
    tblPr = tbl.tblPr if tbl.tblPr is not None else OxmlElement('w:tblPr')
    borders = OxmlElement('w:tblBorders')
    for border_name in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']:
        border = OxmlElement(f'w:{border_name}')
        border.set(qn('w:val'), 'none')
        border.set(qn('w:sz'), '0')
        border.set(qn('w:space'), '0')
        border.set(qn('w:color'), 'auto')
        borders.append(border)
    tblPr.append(borders)
    
    return table, text_cell

def add_images_side_by_side(doc, image_paths, width=Inches(2.8)):
    """Add multiple images side by side"""
    
    # 创建表格并排显示图片
    table = doc.add_table(rows=1, cols=len(image_paths))
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    
    for i, img_path in enumerate(image_paths):
        cell = table.cell(0, i)
        cell.paragraphs[0].add_run().add_picture(img_path, width=width)
        cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    # 隐藏表格边框
    from docx.oxml.ns import qn
    from docx.oxml import OxmlElement
    
    tbl = table._tbl
    tblPr = tbl.tblPr if tbl.tblPr is not None else OxmlElement('w:tblPr')
    borders = OxmlElement('w:tblBorders')
    for border_name in ['top', 'left', 'bottom', 'right', 'insideH', 'insideV']:
        border = OxmlElement(f'w:{border_name}')
        border.set(qn('w:val'), 'none')
        border.set(qn('w:sz'), '0')
        border.set(qn('w:space'), '0')
        border.set(qn('w:color'), 'auto')
        borders.append(border)
    tblPr.append(borders)
    
    return table

def add_image_full_width(doc, image_path):
    """Add image that spans full page width"""
    
    # 获取页面宽度
    section = doc.sections[0]
    page_width = section.page_width
    left_margin = section.left_margin
    right_margin = section.right_margin
    
    # 计算可用宽度
    available_width = page_width - left_margin - right_margin
    
    # 添加图片
    pic = doc.add_picture(image_path, width=available_width)
    
    # 居中对齐
    last_paragraph = doc.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    return pic

Image Caption Format (图注格式)

def add_figure_caption(doc, figure_number, caption_text, position='below'):
    """Add formatted figure caption"""
    
    caption = f"图 {figure_number}  {caption_text}"
    
    para = doc.add_paragraph()
    para.alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    run = para.add_run(caption)
    run.font.size = Pt(10)
    run.font.name = '宋体'
    
    return para

Usage Examples

生成工作报告

User: "帮我写一份2026年第一季度工作总结"

Agent:
1. 收集用户工作内容
2. 搜索相关数据
3. 使用工作模板生成结构
4. 调用word-studio生成文档
5. 输出专业Word文件

生成学术论文

User: "帮我写一篇关于AI发展趋势的论文"

Agent:
1. 搜索最新研究数据
2. 整理论文结构
3. 生成符合学术规范的格式
4. 插入图表和参考文献
5. 输出可提交的论文

Notes

  • 生成时间取决于文档复杂度
  • 首次运行需要安装python-docx
  • 建议使用docx格式以获得最佳兼容性
  • 复杂文档建议分章节生成

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

77.07%
按下载量换算1,282

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 openclaw skills install word-studio 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills