从想法到实践:Excel 转 PPT 应用的诞生之旅

2024 年 11 月,我着手开发了一款exe应用,其主要功能是读取 Excel 文件中的数据,并生成 PPT 文件。
在这里插入图片描述

这款应用看似简单,却给我的商业认知带来了深刻的启发。此前,我与一位老师合作,为其处理 Excel 转 PPT 的工作。当时,我的认知局限于只能在本地为他完成此项任务,若他想自行操作,还需在本地搭建 Python 环境。
后来,我阅读了《一人公司》这本书,从中领悟到若要赚钱,应尽可能将自身行为商业化,而商业化的首要条件是拥有自己的产品。恰在此时,我在抖音上看到了 Cursor 的视频,深受触动,于是果断着手开发。
整个 exe 应用程序的制作过程较为简便。我先是融入了之前相对简陋的代码,同时附上自己绘制的原型图,在短短一小时内便完成了这款应用。完成之后,仿佛开启了一扇全新的大门。
我突然意识到,在工作中若想让自身工作成果更出众,就应多做能为老板创造更多收益的事。比如开发完这个脚本,如果只是在本地调试,或分享给程序员调试,而未将其打造成应用程序或通过其他方式推广运行,其价值远低于将其制作为 exe 应用程序。在生活中,若能将利己之事转化为利他之事,也能为自己增添更多的赚钱渠道。
整个小工具的开发难点,主要并非在于脚本的开发,而是对 PPT 模板的理解。代码的核心逻辑

import argparse
from openpyxl import load_workbook
from pptx import Presentation
import os

VERSION = "1.0.0"

def generate_ppt(ppt_template, excel_file, output_file="output.pptx", max_row=None, fonts=None):
    """
    生成PPT文件
    
    参数:
    ppt_template: PPT模板文件路径
    excel_file: Excel数据文件路径
    output_file: 输出文件路径,默认为'output.pptx'
    max_row: 处理的最大行数,默认为None(处理所有行)
    fonts: 字体设置列表,默认为None(使用默认字体设置)
    """
    try:
        # 默认字体设置
        default_fonts = [
            ('Arial', True),           # 位置1
            ('微软雅黑', False),        # 位置2
            ('康熙字典體試用版', False), # 位置3
            ('微软雅黑', False)         # 位置4
        ]
        fonts = fonts or default_fonts
        
        print("正在加载文件...")
        
        # 加载文件
        wb = load_workbook(excel_file)
        ws = wb.active
        prs = Presentation(ppt_template)
        
        # 删除模板中的第一页(母版)
        rId = prs.slides._sldIdLst[0].rId
        prs.part.drop_rel(rId)
        del prs.slides._sldIdLst[0]
        
        print("正在生成PPT...")
        
        # 生成PPT
        row_count = 0
        for row in ws.iter_rows(min_row=2, values_only=True):
            # 检查是否达到最大行数
            row_count += 1
            if max_row and row_count > max_row:
                break
                
            if row[0] and row[1] and row[2] and row[3]:
                if len(row[1]) <= 4:  # 检查第二列的文字长度
                    slide = prs.slides.add_slide(prs.slide_layouts[0])
                    placeholders = slide.shapes.placeholders
                    
                    for i, pl in enumerate(placeholders):
                        if i < 4:  # 确保不超出范围
                            pl.text = str(row[i])
                            font = pl.text_frame.paragraphs[0].runs[0].font
                            font.name = fonts[i][0]
                            font.bold = fonts[i][1]
            
            if row_count % 10 == 0:
                print(f"已处理 {row_count} 行...")
        
        print("正在保存文件...")
        prs.save(output_file)
        
        processed_rows = min(row_count, max_row) if max_row else row_count
        print(f"处理完成!\n处理了 {processed_rows} 行数据\n文件保存在:{os.path.abspath(output_file)}")
        
    except Exception as e:
        print(f"错误:{str(e)}")
        raise

PPT 母版的参考链接:
https://zhuanlan.zhihu.com/p/5579902474

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW深海气密采水器测控系统

LabVIEW的深海气密采水器测控系统通过高性价比的硬件选择与自主开发的软件&#xff0c;实现了高精度的温度、盐度和深度测量&#xff0c;并在实际海上试验中得到了有效验证。 项目背景 深海气密采水器是进行海底科学研究的关键工具&#xff0c;用LabVIEW开发了一套测控系统&am…

Fastdfs V6.12.1集群部署(arm/x86均可用)

文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统&#xff0c;特别适合用于存…

使用Miniforge构建数据科学环境

一、背景 最近&#xff0c;有不少公司因为员工在工作电脑上安装和使用Anaconda和Miniconda存在商业风险而禁用这两个软件&#xff0c;员工需要找到一个替代方案&#xff0c;Miniforge成为首选&#xff08;对习惯使用conda管理python环境的同学&#xff09; 但实际安装过程中&…

MacOS下PostIn安装配置指南

PostIn是一款开源免费的接口管理工具&#xff0c; 下面介绍私有部署版本的MacOS下安装与配置。私有部署版本更适合有严格数据安全要求的企业&#xff0c;实现对数据和系统的完全控制。 &#xfeff; &#xfeff; 1、MacOS服务端安装 Mac安装包下载地址&#xff1a;下载Mac安…

P6打卡—Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch import torch.nn as nn import matplotlib.pyplot as plt import torchvisiondevicetorch.device("cuda" if torch.cuda.is_…

Electronjs+Vue如何开发PC桌面客户端(Windows,Mac,Linux)

electronjs官网 https://www.electronjs.org/zh/ Electron开发PC桌面客户端的技术选型非常适合已经有web前端开发人员的团队。能够很丝滑的过渡。 Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.…

内旋风铣削知识再学习

最近被有不少小伙伴们问到蜗杆加工的一种方式——内旋风铣削加工。关于旋风铣之前出过一篇《什么是旋风铣&#xff1f;》&#xff0c;简要介绍了旋风铣&#xff08;Whilring&#xff09;的一些基本内容。本期再重新仔细聊一聊内旋风这种加工方式&#xff0c;可加工的零件种类&a…

centos7下docker 容器实现redis主从同步

1.下载redis 镜像 docker pull bitnami/redis2. 文件夹授权 此文件夹是 你自己映射到宿主机上的挂载目录 chmod 777 /app/rd13.创建docker网络 docker network create mynet4.运行docker 镜像 安装redis的master -e 是设置环境变量值 docker run -d -p 6379:6379 \ -v /a…

基于Spring Boot的远程教育网站

一、系统背景与意义 随着互联网技术的飞速发展和普及&#xff0c;远程教育已成为现代教育体系中的重要组成部分。它打破了时间和空间的限制&#xff0c;让学习者可以随时随地进行学习。基于Spring Boot的远程教育网站正是为了满足这一需求而设计的&#xff0c;它利用互联网技术…

cf补题日记4

进度&#xff1a;6/40 我觉得我的思维还是太差了&#xff0c;多练思维题吧&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;燃起来 简直是思维题b题专题了&#xff0c;现在连b都做不出了吗&#xff08;悲 原题1&#xff1a; Cats are attracted to pspspsps, …

WPF Binding 绑定

绑定是 wpf 开发中的精髓&#xff0c;有绑定才有所谓的数据驱动。 1 . 背景 目前 wpf 界面可视化的控件&#xff0c;继承关系如下&#xff0c; 控件的数据绑定&#xff0c;基本上都要借助于 FrameworkElement 的 DataContext 属性。 只有先设置了控件的 DataContext 属性&…

datasets笔记:两种数据集对象

Datasets 提供两种数据集对象&#xff1a;Dataset 和 ✨ IterableDataset ✨。 Dataset 提供快速随机访问数据集中的行&#xff0c;并支持内存映射&#xff0c;因此即使加载大型数据集也只需较少的内存。IterableDataset 适用于超大数据集&#xff0c;甚至无法完全下载到磁盘或…

【Python】【数据分析】深入探索 Python 数据可视化:Seaborn 可视化库详解

目录 引言一、Seaborn 简介二、安装 Seaborn三、Seaborn 的基本图形3.1 散点图&#xff08;Scatter Plot&#xff09;3.2 线图&#xff08;Line Plot&#xff09;3.3 条形图&#xff08;Bar Plot&#xff09;3.4 箱型图&#xff08;Box Plot&#xff09;3.5 小提琴图&#xff0…

如何构建机器学习数据集

1. 常见数据集网站 论文开源代码/数据集&#xff1a;Paperswithcodes 竞赛数据集&#xff1a;Kaggle Dataset 数据集搜索工具&#xff1a;Google Dataset Search HuggingFace&#xff1a;Hugging Face 魔塔&#xff1a;Model Scope 开源工具包自带&#xff1a;Pytorch, tensor…

EMQX V5 使用API 密钥将客户端踢下线

在我们选用开源的EMQX作为mqtt broker&#xff0c;我们可能会考虑先让客户端连接mqtt broker成功&#xff0c;再去校验客户端的有效性&#xff0c;当该客户端认证失败&#xff0c;再将其踢下线。例如&#xff1a;物联网设备连接云平台时&#xff0c;我们会将PK、PS提前烧录到设…

Ubuntu搭建ES8集群+加密通讯+https访问

目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…

电子电气架构---基于PREEvision的线束设计工作流程优化

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap

re:Invent 是全球云计算领域的顶级盛会&#xff0c;每年都会吸引来自世界各地的技术领袖、创新者和实践者汇聚一堂&#xff0c;分享最新的技术成果和创新实践&#xff0c;深圳 UG 作为亚马逊云科技技术社区的重要组成部分&#xff0c;将借助 re:Invent 的东风&#xff0c;举办此…

从零搭建纯前端飞机大战游戏(附源码)

目录 前言 一、游戏概览与技术选型 二、HTML 结构搭建和CSS样式美化 三、JavaScript 核心逻辑 1.变量声明与初始化 2.玩家飞机控制函数 3.射击与子弹管理函数 4.敌机生成与管理函数 5.碰撞检测与得分更新函数 6.游戏主循环与启动函数 四、完整代码 前言 在前端开发的…

【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南

硬件&#xff1a;Apple M4 Pro 16寸 系统&#xff1a; macos Sonoma 15.1.1 Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;广泛应用于全球各地的网站和企业应用中。本文将详细介绍如何在 macOS 环境下使用 Homebrew 安装、启动、管理以及优化配置 Nginx&#x…