PPT 制作难题迎刃而解,影刀 RPA 开启自动化创作时代

前言

影刀cto说过这么一句话:不迷信AI,也不忽视AI,我们要打造以AI驱动的RPA,AI对当前社会的影响真的不亚于一场战争的爆发
image.png
RPA(机器人流程自动化)作为一种已被广泛应用的技术,能基于预设规则自动执行重复性任务,有效提升效率、降低成本,但其局限性在于缺乏智能决策和处理复杂任务的能力。

打造以 AI 驱动的 RPA,是将两者优势融合,实现 “1 + 1> 2” 效果的明智之举。从效率提升角度看,RPA 能够不知疲倦地处理大量重复、规律性的工作流程,像数据录入、文件整理等基础任务。而 AI 的加入,能让 RPA 具备智能判断和灵活应变能力。例如在财务报销流程中,传统 RPA 可完成表单填写、数据核对等操作,但面对复杂报销场景,如特殊费用说明、模糊票据识别时往往力不从心。

从技术发展趋势来看,AI 与 RPA 的融合是自动化技术迈向更高阶段的必然路径。

使用RPA进行ppt的生成操作

在我们的日常生活中,ppt的制作时长会出现,并且我觉得制作一个ppt的步骤十分繁琐,所以我就思考是否能让rpa帮助我直接生成我想要的ppt呢?

RPA 可以自动化执行 PPT 生成过程中的重复性任务,如根据预设模板填充数据、插入图片、设置格式等。它能够以极快的速度完成这些操作,大大节省了人工制作 PPT 的时间,尤其是在处理大量类似 PPT 时,效率提升更为显著。

当需要生成大量 PPT 或对 PPT 生成的需求不断增加时,RPA 可以轻松应对,通过简单地调整配置或增加机器人数量,就能满足业务的增长需求,而无需大量增加人力成本。

我们直接从一大堆生成出来的ppt中选择自己喜欢的样式就行了,那么通过RPA实现ppt的生成确实对我们很有利,也适当的增加了工作摸鱼的时间

那么下面我们就介绍下如何进行这款ppt自动化机器人的生成吧

这里我们是通过一条魔法指令实现的
输入命令->“你读取我给你变量的信息,然后根据这个变量的信息进行读取需要生成的ppt的相关信息,然后 你进行生成,生成之前需要弹出一个弹窗,让我选择ppt的存储位置”
image.png
然后魔法指令就可以进行代码的生成
虽然经历了几次报错,但是我们直接将报错的信息发送给影刀ai,他就可以立马判断出错误的位置是哪里
image.png
最后我们也是成功的生成出来了,我们可以进行一个测试操作
直接进行运行

这里我们随便输入一个ppt内容文本进行测试下
文本内容"人工智能发展概述"
可以看到左下角会有详细流程说明
image.png
image.png
稍微等了30秒就生成好了,我们可以看下效果
ppt的基本内容都是没有缺少的,讲解的都是比较详细的
image.png
那么我们的核心魔法指令搞定了之后我们就进行外围指令的拼接
外围的话,为了美观整个流程的话,我们加上弹窗,提示我们需要将文件保存在哪个文件夹里面,以及加上消息通知:请输入你的文本信息

在开头加上一个自定义对话框设计器,为的是我们一运行程序,程序就可以进行让我们输入我们想要获取的ppt类型,就是让我们输入一段描述我们想生成ppt的描述就行了
我们这里选择文本域就行了
image.png
将获取到的信息保存在变量ppt文本内容里面就行了
image.png
这个时候我们可以将魔法指令中的PPT内容文本改成刚刚设置的变量
image.png
但是我们实际运行发现,并不能获取到我们输入信息
所以我们在外部调试下,估计是内容文本没有获取到我们将这两个都进行打印一下,看看谁是我们的输入的文本
image.png

image.png
很明显可以看到是第四行输入的正确信息,那么我们就将这个变量输入进去
image.png
到这里我们的一系列的流程就搞定了
下面是整个流程的概括,大家可以参考下
image.png

源码如下:

# 使用此指令前,请确保安装必要的Python库,例如使用以下命令安装:

# pip install requests requests-toolbelt

  

import requests

import tkinter as tk

from tkinter import filedialog

import os

import time

import base64

import hashlib

import hmac

import json

from requests_toolbelt.multipart.encoder import MultipartEncoder

  

from typing import *

try:

    from xbot.app.logging import trace as print

except:

    from xbot import print

  
  

def generate_ppt(content):

    """

    title: 生成PPT并保存

    description: 根据用户提供的%content%内容,调用讯飞PPT生成API,并将生成的PPT文件保存到用户选择的位置。

    inputs:

        - content (str): PPT内容文本,eg: "人工智能发展概述"

    outputs:

        - save_path (str): 保存路径,eg: "C:/Users/Desktop/演示文稿.pptx"

    """

    # 获取桌面路径作为默认保存位置

    desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")

    default_filename = "演示文稿.pptx"

    default_save_path = os.path.join(desktop_path, default_filename)

    # 1. 弹出文件保存对话框

    root = tk.Tk()

    root.withdraw()  # 隐藏主窗口

    save_path = filedialog.asksaveasfilename(

        title="选择PPT保存位置",

        filetypes=[("PowerPoint files", "*.pptx")],

        defaultextension=".pptx",

        initialdir=desktop_path,

        initialfile=default_filename

    )

    # 如果用户取消选择,则使用默认路径

    if not save_path:

        save_path = default_save_path

    # 2. 调用讯飞PPT生成API

    app_id = "b0bd38f5"

    api_secret = "XXXXXXXXXXXXXXXXXXXXXX"

    template_id = "XXXXXXXXXXXXXXXXXXXXXxx"  # 使用预定义的模板ID

    try:

        # 创建AIPPT辅助类对象

        ppt_generator = _AIPPT(app_id, api_secret, content, template_id)

        # 创建PPT生成任务并获取任务ID

        task_id = ppt_generator.create_task()

        if not task_id:

            return "创建PPT任务失败,请检查网络连接和API凭据"

        # 打印状态信息

        print(f"PPT生成任务已创建,任务ID: {task_id}")

        print("正在生成PPT,请稍候...")

        # 获取PPT下载链接

        ppt_url = ppt_generator.get_result(task_id)

        if not ppt_url:

            return "获取PPT下载链接失败"

        # 下载PPT文件

        print(f"正在下载PPT到: {save_path}")

        response = requests.get(ppt_url)

        # 保存PPT文件

        with open(save_path, 'wb') as f:

            f.write(response.content)

        print(f"PPT已成功保存到: {save_path}")

        return save_path

    except Exception as e:

        error_msg = f"生成PPT过程中出错: {str(e)}"

        print(error_msg)

        return error_msg

  
  

# 辅助类:用于与讯飞PPT生成API交互

def _AIPPT(app_id, api_secret, text, template_id):

    class AIPPT:

        def __init__(self, app_id, api_secret, text, template_id):

            self.APPid = app_id

            self.APISecret = api_secret

            self.text = text

            self.header = {}

            self.templateId = template_id

  

        # 获取签名

        def get_signature(self, ts):

            try:

                # 对app_id和时间戳进行MD5加密

                auth = self.md5(self.APPid + str(ts))

                # 使用HMAC-SHA1算法对加密后的字符串进行加密

                return self.hmac_sha1_encrypt(auth, self.APISecret)

            except Exception as e:

                print(f"生成签名时出错: {e}")

                return None

  

        def hmac_sha1_encrypt(self, encrypt_text, encrypt_key):

            # 使用HMAC-SHA1算法对文本进行加密,并将结果转换为Base64编码

            return base64.b64encode(hmac.new(encrypt_key.encode('utf-8'), encrypt_text.encode('utf-8'), hashlib.sha1).digest()).decode('utf-8')

  

        def md5(self, text):

            # 对文本进行MD5加密,并返回加密后的十六进制字符串

            return hashlib.md5(text.encode('utf-8')).hexdigest()

  

        # 创建PPT生成任务

        def create_task(self):

            url = 'https://zwapi.xfyun.cn/api/ppt/v2/create'

            timestamp = int(time.time())

            signature = self.get_signature(timestamp)

  

            # 准备multipart/form-data数据

            form_data = MultipartEncoder(

                fields={

                    "query": self.text,

                    "templateId": self.templateId,

                    "author": "User",

                    "isCardNote": str(True),

                    "search": str(False),

                    "isFigure": str(True),

                    "aiImage": "normal"

                }

            )

  

            # 设置请求头

            headers = {

                "appId": self.APPid,

                "timestamp": str(timestamp),

                "signature": signature,

                "Content-Type": form_data.content_type

            }

            self.header = headers

            # 发送请求

            print("正在提交PPT生成请求...")

            response = requests.post(url=url, data=form_data, headers=headers)

            # 检查请求是否成功

            if response.status_code != 200:

                print(f"API请求失败,状态码: {response.status_code}")

                print(f"响应内容: {response.text}")

                return None

            # 解析响应

            try:

                resp = response.json()

                print(f"API响应: {resp}")

                if resp.get('code') == 0:

                    return resp['data']['sid']

                else:

                    print(f"创建PPT任务失败: {resp.get('message', '未知错误')}")

                    return None

            except json.JSONDecodeError:

                print(f"API返回非JSON格式响应: {response.text[:200]}")

                return None

  

        # 轮询任务进度

        def get_process(self, sid):

            if sid is None:

                return None

            response = requests.get(

                url=f"https://zwapi.xfyun.cn/api/ppt/v2/progress?sid={sid}",

                headers=self.header

            )

            return response.text

  

        # 获取PPT下载链接

        def get_result(self, task_id):

            if task_id is None:

                return None

            # 轮询任务进度

            progress = 0

            while True:

                response = self.get_process(task_id)

                if not response:

                    print("获取任务进度失败")

                    return None

                resp = json.loads(response)

                # 检查PPT生成状态

                ppt_status = resp['data']['pptStatus']

                ai_image_status = resp['data']['aiImageStatus']

                card_note_status = resp['data']['cardNoteStatus']

                # 计算总进度

                current_progress = self._calculate_progress(ppt_status, ai_image_status, card_note_status)

                if current_progress > progress:

                    progress = current_progress

                    print(f"生成进度: {progress}%")

                # 检查是否所有任务都已完成

                if ppt_status == 'done' and ai_image_status == 'done' and card_note_status == 'done':

                    ppt_url = resp['data']['pptUrl']

                    print("PPT生成完成!")

                    return ppt_url

                else:

                    # 每3秒检查一次进度

                    time.sleep(3)

        # 计算总进度百分比

        def _calculate_progress(self, ppt_status, ai_image_status, card_note_status):

            statuses = {

                'waiting': 0,

                'running': 50,

                'done': 100

            }

            ppt_progress = statuses.get(ppt_status, 0)

            ai_image_progress = statuses.get(ai_image_status, 0)

            card_note_progress = statuses.get(card_note_status, 0)

            # 根据不同任务的权重计算总进度

            total_progress = (ppt_progress * 0.5) + (ai_image_progress * 0.3) + (card_note_progress * 0.2)

            return int(total_progress)

    return AIPPT(app_id, api_secret, text, template_id)

实验效果展示

运行程序输入ppt文本内容
image.png

然后弹窗提示我们选择ppt保存位置,我们直接选择桌面就行了
image.png
保存之后他会进行生成操作,我们稍等一会儿就好了
image.png
程序运行成功了
image.png
最后我们打开ppt文件,可见效果还是蛮不错的
image.png

总结

在信息爆炸、时间宝贵的当下,PPT 制作常因繁琐耗时成为诸多人士的困扰。影刀 RPA 的出现,为这一难题提供了高效解决方案。就如上,通过短短5条指令就能实现一整条自动化生成ppt的流水线操作,这难道不香吗?
想体验的可以来体验下
自动化生成ppt获取
密码是666666

### 影刀RPA 实现淘宝网页自动化 #### 使用影刀RPA进行淘宝网页自动化的教程示例 为了实现淘宝网页的自动化,可以通过影刀RPA来完成一系列的任务。具体来说,影刀RPA能够模拟人类在电脑和平板上的操作行为,包括Web自动化、桌面软件自动化以及手机APP自动化等[^1]。 对于淘宝网页自动化而言,主要涉及以下几个方面: - **登录淘宝账号** 需要先打开浏览器并导航到淘宝网站,输入用户名和密码以完成登录过程。这一步骤通常涉及到定位页面中的特定元素(如用户名框、密码框),并通过发送键入命令来进行交互。 ```python from RPA.Browser.Selenium import Selenium browser = Selenium() browser.open_available_browser("https://www.taobao.com/") browser.input_text('css:#fm-login-id', 'your_username') browser.input_text('css:#fm-login-password', 'your_password') ``` - **搜索商品** 登录成功之后,可以利用关键词搜索功能查找所需的商品类别或单品。此环节同样依赖于识别搜索栏位置,并向其传递指定字符串参数。 ```python search_box = "id=q" keyword = "笔记本电脑" browser.input_text(search_box, keyword) browser.press_keys(search_box, "ENTER") ``` - **提取商品信息** 当目标列表展示出来以后,则需进一步解析各个条目的详情页链接、图片地址、价格区间等内容项。借助XPath表达式或其他选择器语法可精准锁定这些节点对象。 ```python items = [] elements = browser.find_elements('xpath://div[@class="items"]/div[contains(@class,"item")]') for element in elements[:5]: # 只取前五件商品作为示范 title = element.find_element_by_css_selector('.title').text.strip() price = element.find_element_by_css_selector('.price').text.replace("¥", "").strip() link = element.find_element_by_tag_name('a').get_attribute('href') item_info = { "Title": title, "Price": float(price), "Link": link } items.append(item_info) print(items) ``` 最后,上述收集的数据还可以被导出至Excel文件中以便后续分析处理[^2]。 ```python import pandas as pd df = pd.DataFrame(items) df.to_excel('./taobao_items.xlsx', index=False) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值