Token导航 LogoToken导航TokenDH.com
效率权限需确认clawhub未标认证来源可访问clear审计通过

pptx-generatorPPTX 生成器

Agent Skill

pptx-generator 用于补充效率相关能力,适合在 OpenClaw 中需要让 Agent 承接效率相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

182,213

周安装

7,827

GitHub Stars

公开资料未说明

下载量

63,868
OpenClaw

安装说明

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

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

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

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

命令行安装

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

ClawHubOpenClaw
openclaw skills install pptx-generator

简介

专业 PPTX 生成器,用于创建具有专业布局和精美设计的可编辑 PowerPoint 演示文稿。

  • 适合企业报告、产品展示或培训材料等需要结构化视觉呈现的场景。
  • 通过自然语言描述内容结构,自动生成多风格幻灯片并保留编辑能力。
  • 安装前需确认是否支持联网调用及文件输出权限,建议结合项目实际需求核验兼容性。
  • 涉及商业用途时,应检查模板版权和图表数据合规性,避免使用敏感或未授权素材。

SKILL.md

name
pptx-generator
description
专业PPT生成器。Use when user wants to create editable PowerPoint presentations with professional layouts, multiple styles, and beautiful designs. Supports business, academic, creative styles. 可编辑PPT、幻灯片制作、演示文稿。
version
1.0.1
license
MIT-0
metadata
{"openclaw": {"emoji": "📊", "requires": {"bins": ["python3"], "env": []}}}
dependencies
pip install python-pptx pillow

PPT Generator

专业PPT生成器,创建可编辑、排版精美、多风格的PowerPoint演示文稿。

Features

  • 📊 可编辑PPTX: 标准Office格式,可二次编辑
  • 🎨 多种风格: 商务、学术、创意、简约
  • 📐 精美排版: 专业布局,字体层次清晰
  • 📈 图表支持: 柱状图、折线图、饼图
  • 🖼️ 图片支持: 插入图片,自动排版
  • 📝 专业模板: 10+预制模板

支持的风格

风格适用场景特点
商务蓝商业汇报专业、稳重
学术白学术论文简洁、规范
创意紫创意展示时尚、活力
科技深技术分享现代、高端
极简灰通用场景简约、百搭

使用方式

User: "帮我做一个关于AI发展的PPT"
User: "生成商务风格的项目汇报PPT"
User: "做一个学术论文答辩PPT"

Python代码实现

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE

class PPTGenerator:
    def __init__(self, style='business_blue'):
        self.prs = Presentation()
        self.style = style
        self.colors = self._get_colors(style)
        self.fonts = self._get_fonts()
    
    def _get_colors(self, style):
        """获取配色方案"""
        schemes = {
            'business_blue': {
                'primary': RGBColor(30, 60, 114),
                'secondary': RGBColor(70, 130, 180),
                'accent': RGBColor(255, 193, 7),
                'text': RGBColor(51, 51, 51),
                'bg': RGBColor(255, 255, 255)
            },
            'academic_white': {
                'primary': RGBColor(0, 51, 102),
                'secondary': RGBColor(102, 102, 102),
                'accent': RGBColor(204, 0, 0),
                'text': RGBColor(51, 51, 51),
                'bg': RGBColor(255, 255, 255)
            },
            'creative_purple': {
                'primary': RGBColor(102, 45, 140),
                'secondary': RGBColor(155, 89, 182),
                'accent': RGBColor(241, 196, 15),
                'text': RGBColor(51, 51, 51),
                'bg': RGBColor(248, 248, 255)
            },
            'tech_dark': {
                'primary': RGBColor(30, 30, 30),
                'secondary': RGBColor(60, 60, 60),
                'accent': RGBColor(0, 200, 150),
                'text': RGBColor(240, 240, 240),
                'bg': RGBColor(20, 20, 25)
            },
            'minimal_gray': {
                'primary': RGBColor(80, 80, 80),
                'secondary': RGBColor(150, 150, 150),
                'accent': RGBColor(0, 120, 215),
                'text': RGBColor(51, 51, 51),
                'bg': RGBColor(250, 250, 250)
            }
        }
        return schemes.get(style, schemes['business_blue'])
    
    def _get_fonts(self):
        """获取字体配置"""
        return {
            'title': 'Arial',
            'body': 'Arial',
            'chinese': 'Microsoft YaHei'
        }
    
    def add_title_slide(self, title, subtitle=''):
        """添加封面页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        
        # 背景色
        self._set_slide_bg(slide, self.colors['bg'])
        
        # 标题
        left, top, width, height = Inches(1), Inches(2), Inches(8), Inches(2)
        txBox = slide.shapes.add_textbox(left, top, width, height)
        tf = txBox.text_frame
        tf.word_wrap = True
        
        p = tf.paragraphs[0]
        p.text = title
        p.font.size = Pt(44)
        p.font.bold = True
        p.font.color.rgb = self.colors['primary']
        p.alignment = PP_ALIGN.CENTER
        
        # 副标题
        if subtitle:
            p2 = tf.add_paragraph()
            p2.text = subtitle
            p2.font.size = Pt(20)
            p2.font.color.rgb = self.colors['secondary']
            p2.alignment = PP_ALIGN.CENTER
            p2.space_before = Pt(20)
        
        return slide
    
    def add_content_slide(self, title, bullets, layout='left'):
        """添加内容页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        
        # 背景色
        self._set_slide_bg(slide, self.colors['bg'])
        
        # 标题栏
        self._add_title_bar(slide, title)
        
        # 内容区域
        left, top, width, height = Inches(0.8), Inches(1.5), Inches(8.4), Inches(5)
        txBox = slide.shapes.add_textbox(left, top, width, height)
        tf = txBox.text_frame
        tf.word_wrap = True
        
        for i, bullet in enumerate(bullets):
            p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
            p.text = f"• {bullet}"
            p.font.size = Pt(18)
            p.font.color.rgb = self.colors['text']
            p.space_after = Pt(12)
        
        return slide
    
    def add_two_column_slide(self, title, left_content, right_content):
        """添加双栏内容页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        
        self._set_slide_bg(slide, self.colors['bg'])
        self._add_title_bar(slide, title)
        
        # 左栏
        left_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.5), Inches(4.5), Inches(5))
        left_tf = left_box.text_frame
        left_tf.word_wrap = True
        
        for i, item in enumerate(left_content):
            p = left_tf.paragraphs[0] if i == 0 else left_tf.add_paragraph()
            p.text = f"• {item}"
            p.font.size = Pt(16)
            p.font.color.rgb = self.colors['text']
            p.space_after = Pt(10)
        
        # 右栏
        right_box = slide.shapes.add_textbox(Inches(5.2), Inches(1.5), Inches(4.5), Inches(5))
        right_tf = right_box.text_frame
        right_tf.word_wrap = True
        
        for i, item in enumerate(right_content):
            p = right_tf.paragraphs[0] if i == 0 else right_tf.add_paragraph()
            p.text = f"• {item}"
            p.font.size = Pt(16)
            p.font.color.rgb = self.colors['text']
            p.space_after = Pt(10)
        
        return slide
    
    def add_table_slide(self, title, headers, rows):
        """添加表格页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        
        self._set_slide_bg(slide, self.colors['bg'])
        self._add_title_bar(slide, title)
        
        # 创建表格
        rows_count = len(rows) + 1
        cols_count = len(headers)
        
        left, top = Inches(0.5), Inches(1.8)
        width, height = Inches(9), Inches(4)
        
        table_shape = slide.shapes.add_table(rows_count, cols_count, left, top, width, height)
        table = table_shape.table
        
        # 设置表头
        for i, header in enumerate(headers):
            cell = table.cell(0, i)
            cell.text = header
            cell.fill.solid()
            cell.fill.fore_color.rgb = self.colors['primary']
            
            for paragraph in cell.text_frame.paragraphs:
                paragraph.font.size = Pt(14)
                paragraph.font.bold = True
                paragraph.font.color.rgb = RGBColor(255, 255, 255)
                paragraph.alignment = PP_ALIGN.CENTER
        
        # 设置数据行
        for row_idx, row in enumerate(rows, 1):
            for col_idx, cell_text in enumerate(row):
                cell = table.cell(row_idx, col_idx)
                cell.text = str(cell_text)
                
                for paragraph in cell.text_frame.paragraphs:
                    paragraph.font.size = Pt(12)
                    paragraph.font.color.rgb = self.colors['text']
                    paragraph.alignment = PP_ALIGN.CENTER
        
        return slide
    
    def add_image_slide(self, title, image_path, caption=''):
        """添加图片页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        
        self._set_slide_bg(slide, self.colors['bg'])
        self._add_title_bar(slide, title)
        
        # 插入图片
        left, top, width, height = Inches(1.5), Inches(1.8), Inches(7), Inches(4.5)
        slide.shapes.add_picture(image_path, left, top, width, height)
        
        # 添加说明
        if caption:
            txBox = slide.shapes.add_textbox(Inches(1), Inches(6.5), Inches(8), Inches(0.5))
            tf = txBox.text_frame
            p = tf.paragraphs[0]
            p.text = caption
            p.font.size = Pt(12)
            p.font.color.rgb = self.colors['secondary']
            p.alignment = PP_ALIGN.CENTER
        
        return slide
    
    def add_summary_slide(self, title, points, conclusion):
        """添加总结页"""
        slide = self.prs.slides.add_slide(self.prs.slide_layouts[6])
        
        self._set_slide_bg(slide, self.colors['bg'])
        self._add_title_bar(slide, title)
        
        # 要点
        txBox = slide.shapes.add_textbox(Inches(0.8), Inches(1.5), Inches(8.4), Inches(3.5))
        tf = txBox.text_frame
        tf.word_wrap = True
        
        for i, point in enumerate(points):
            p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
            p.text = f"✓ {point}"
            p.font.size = Pt(18)
            p.font.color.rgb = self.colors['text']
            p.space_after = Pt(10)
        
        # 结论框
        conclusion_box = slide.shapes.add_shape(
            MSO_SHAPE.ROUNDED_RECTANGLE,
            Inches(0.8), Inches(5.2), Inches(8.4), Inches(1.2)
        )
        conclusion_box.fill.solid()
        conclusion_box.fill.fore_color.rgb = self.colors['secondary']
        
        tf2 = conclusion_box.text_frame
        tf2.word_wrap = True
        p2 = tf2.paragraphs[0]
        p2.text = f"💡 {conclusion}"
        p2.font.size = Pt(16)
        p2.font.color.rgb = RGBColor(255, 255, 255)
        p2.alignment = PP_ALIGN.CENTER
        
        return slide
    
    def _set_slide_bg(self, slide, color):
        """设置幻灯片背景"""
        background = slide.background
        fill = background.fill
        fill.solid()
        fill.fore_color.rgb = color
    
    def _add_title_bar(self, slide, title):
        """添加标题栏"""
        # 标题背景
        title_bar = slide.shapes.add_shape(
            MSO_SHAPE.RECTANGLE,
            Inches(0), Inches(0), Inches(10), Inches(1.2)
        )
        title_bar.fill.solid()
        title_bar.fill.fore_color.rgb = self.colors['primary']
        title_bar.line.fill.background()
        
        # 标题文字
        txBox = slide.shapes.add_textbox(Inches(0.5), Inches(0.2), Inches(9), Inches(0.8))
        tf = txBox.text_frame
        p = tf.paragraphs[0]
        p.text = title
        p.font.size = Pt(28)
        p.font.bold = True
        p.font.color.rgb = RGBColor(255, 255, 255)
        p.alignment = PP_ALIGN.LEFT
    
    def save(self, output_path):
        """保存PPT"""
        self.prs.save(output_path)
        return output_path

# 使用示例
gen = PPTGenerator(style='business_blue')

# 添加封面
gen.add_title_slide('2026年AI行业报告', '从大模型到智能体时代')

# 添加内容页
gen.add_content_slide('市场概况', [
    '全球AI市场规模突破3.2万亿美元',
    '企业AI采用率达到89%',
    '年度投资总额1280亿美元'
])

# 添加表格页
gen.add_table_slide('核心数据', 
    ['指标', '2025', '2026', '增长率'],
    [
        ['市场规模', '$2.1T', '$3.2T', '52%'],
        ['企业采用', '72%', '89%', '24%'],
        ['投资总额', '$790亿', '$1280亿', '62%']
    ]
)

# 添加总结页
gen.add_summary_slide('总结', [
    'AI技术持续突破',
    'Agent技术走向成熟',
    '开源生态蓬勃发展'
], '2026年是AI发展的关键转折点')

# 保存
gen.save('output.pptx')

使用场景

User: "做一个20页的AI行业报告PPT,商务风格"
Agent: 使用 PPTGenerator(style='business_blue') 生成

User: "做一个学术答辩PPT"
Agent: 使用 PPTGenerator(style='academic_white') 生成

User: "做一个技术分享PPT,科技风格"
Agent: 使用 PPTGenerator(style='tech_dark') 生成

Notes

  • 生成标准.pptx格式,可编辑
  • 支持Microsoft PowerPoint、WPS、LibreOffice
  • 字体自动适配系统
  • 支持中英文

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

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

04

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

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

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

能力 4

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

能力 5

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

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

平台分布

OpenClaw

98.28%
按下载量换算62,769

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

权限需确认

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

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

来源信息

继续浏览同类 Skills