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

devtools/2024/12/22 21:09:12/

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

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

import argparse
from openpyxl import load_workbook
from pptx import Presentation
import osVERSION = "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_fontsprint("正在加载文件...")# 加载文件wb = load_workbook(excel_file)ws = wb.activeprs = Presentation(ppt_template)# 删除模板中的第一页(母版)rId = prs.slides._sldIdLst[0].rIdprs.part.drop_rel(rId)del prs.slides._sldIdLst[0]print("正在生成PPT...")# 生成PPTrow_count = 0for row in ws.iter_rows(min_row=2, values_only=True):# 检查是否达到最大行数row_count += 1if max_row and row_count > max_row:breakif row[0] and row[1] and row[2] and row[3]:if uiltin">len(row[1]) <= 4:  # 检查第二列的文字长度slide = prs.slides.add_slide(prs.slide_layouts[0])placeholders = slide.shapes.placeholdersfor i, pl in uiltin">enumerate(placeholders):if i < 4:  # 确保不超出范围pl.text = uiltin">str(row[i])font = pl.text_frame.paragraphs[0].runs[0].fontfont.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 = uiltin">min(row_count, max_row) if max_row else row_countprint(f"处理完成!\n处理了 {processed_rows} 行数据\n文件保存在:{os.path.abspath(output_file)}")except Exception as e:print(f"错误:{uiltin">str(e)}")raise

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


http://www.ppmy.cn/devtools/144481.html

相关文章

AI程序员,开源的Devin,OpenHands 如何使用HuggingFace Inference API

我用了一下&#xff0c;界面这样子&#xff1a; Github&#xff1a;https://github.com/All-Hands-AI/OpenHands OpenHands 如何使用HuggingFace Inference API huggingface/meta-llama/Llama-3.3-70B-Instruct 而不是 meta-llama/Llama-3.3-70B-Instruct 不要设置base URL&…

Linux之搜索类命令

1、find 作用&#xff1a;查找文件或目录 语法&#xff1a; find [搜索范围][选项]选项&#xff1a; -name<查询方式>&#xff1a;按照指定的文件名查找模式查找文件 -user<用户名>&#xff1a;查找属于指定用户的所有文件 -size<文件大小>&#xff1a;按照…

python实现word转html

目录 使用mammoth库 使用spire.doc库 使用mammoth库 mammoth库支持将word转为HTML和markdown格式的文件。 import mammothdef word_html(word_file):html_save_name fr{word_file.split(.)[0]}.htmlwith open(word_file, rb) as f:data mammoth.convert_to_html(f)with o…

【数理统计】极限定理及抽样分布

文章目录 中心极限定理抽样分布卡方分布t分布F分布正态总体的【样本均值】与【样本方差】的分布 中心极限定理 【中心极限定理】设随机变量 X k ( k 1 , 2 , . . . , n ) X_k(k1,2,...,n) Xk​(k1,2,...,n) 相互独立且服从同一分布&#xff0c;数学期望 E ( X k ) μ E(X_…

D 咖智能饮品机器人:开启商业新篇

在科技迅猛发展的当下&#xff0c;智能机器人正逐步渗透到各个商业领域&#xff0c;D 咖智能饮品机器人便是其中的佼佼者&#xff0c;它的出现为饮品行业带来全新的发展契机&#xff0c;有望开启商业新篇。 从大环境来看&#xff0c;消费者对于饮品的需求日益多元化和个性化。他…

你的第一个博客-第二弹

按照第一弹中博客整体布局和功能要求&#xff0c;给出 templates 目录下相关的 HTML 模板代码。 1. base.html (基础模板) base.html 是所有页面的基础模板&#xff0c;包含了公共的 HTML 结构&#xff08;如头部、尾部、导航条等&#xff09;&#xff0c;其他页面会继承它。…

怎么给git动图扣除背景?

环境&#xff1a; Wn10 专业版 python 问题描述&#xff1a; 怎么给git动图扣除背景&#xff1f; 解决方案&#xff1a; 要将一个 GIF 动图的尺寸改为 50x50 并且把黑色背景改成透明&#xff0c;您可以使用 Python 的 Pillow 库。Pillow 支持处理静态图像和动画 GIF。下面…

JaxaFx学习(三)

目录&#xff1a; &#xff08;1&#xff09;JavaFx MVVM架构实现 &#xff08;2&#xff09;javaFX知识点 &#xff08;3&#xff09;JavaFx的MVC架构 &#xff08;4&#xff09;JavaFx事件处理机制 &#xff08;5&#xff09;多窗体编程 &#xff08;6&#xff09;数据…