全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2025-05-30_「转」这种小工具居然也能在某鱼卖钱?我用Python一天能写100个,纯干货!

您的位置:首页 >> 新闻 >> 行业资讯

这种小工具居然也能在某鱼卖钱?我用Python一天能写100个,纯干货! (??金石瓜分计划强势上线,速戳上图了解详情??)前两天在某鱼闲逛,本来想找个二手机械键盘,结果刷着刷着突然看到有人在卖——「Word 批量转 PDF 小工具」,还挺火,价格也不高,但销量出奇地高,评论里一堆人在夸 “好用”、“终于不用一篇篇点了” 啥的。说实话,当时我人都愣住了—— 「这个功能我用 Python 十分钟能写完啊!」 然后我又搜了其它小工具,pdf 转 Word,Word 转图片,Word 加水印什么的…… 好多 好家伙,花姐以前教大家做的办公自动化小工具原来都能卖钱呀! 那咱今天先复刻一个「Word 批量转 PDF 小工具」,顺便升级点功能,做个更丝滑的版本。 「保准你看完就能自己写个卖钱去。」 ??思路先摆明:Word 转 PDF,其实没那么复杂你别看这功能听起来挺 “高端” 的,其实本质上干的事就是—— ?把一堆 Word 文档用程序打开,然后保存为 PDF 格式。 ?换句话说,这活本质就是个 “批处理”。用 Python 来干,简直再合适不过。 我们需要的工具是python-docx?NoNoNo——这个库不支持保存为 PDF。真正的主角其实是: 「win32com.client」:用来操作 Word 应用(需要 Windows 系统 + 装了 Office)或者跨平台一点的玩法,用「LibreOffice + subprocess」,不过今天我们先来讲讲最稳最简单的方式:用 Word 本尊来干活。??上代码:几行就能跑起来的 Word 转 PDF 脚本好,开门见山,先上最基础的版本: import os import win32com.client def word_to_pdf(input_path, output_path): word = win32com.client.Dispatch("Word.Application") word.Visible = False # 不弹窗,后台运行 doc = word.Documents.Open(input_path) doc.SaveAs(output_path, FileFormat=17) # 17 是 PDF 格式 doc.Close() word.Quit() # 示例用法 word_to_pdf("C:/Users/你的用户名/Desktop/测试文档.docx", "C:/Users/你的用户名/Desktop/测试文档.pdf") ??几句解释:Dispatch("Word.Application")就是打开 Word 应用;FileFormat=17是告诉它 “嘿,我要存成 PDF”;结尾的Quit()很重要,不然 Word 可能会在后台一直挂着,占资源。如果你电脑里安装的是「WPS」,Dispatch("Word.Application")这里改成Dispatch("kwps.Application"),不然会报错是不是很简单?连我猫都看懂了。 ??扩展:支持批量转换,一次性把一整个文件夹干掉!很多人痛苦的点是 “文档太多,一个个转太麻烦”。 那好说,我们搞个批量版本,让它一口气全转了: def batch_convert(folder_path): word = win32com.client.Dispatch("Word.Application") word.Visible = False for file in os.listdir(folder_path): if file.endswith(".doc") or file.endswith(".docx"): doc_path = os.path.join(folder_path, file) pdf_path = os.path.splitext(doc_path)[0] + ".pdf" try: doc = word.Documents.Open(doc_path) doc.SaveAs(pdf_path, FileFormat=17) doc.Close() print(f"? 转换成功:{file}") except Exception as e: print(f"? 转换失败:{file},原因:{e}") word.Quit() 使用方式:batch_convert(r"C:\Users\你的用户名\Desktop\word文件夹") ??常见坑点,花姐来帮你避一避写得简单不难,「难的是兼容和细节」。 ?1. 系统必须是 Windows,而且得装了 MS Office这玩意底层其实就是用 COM 调用了 Word 的功能,所以没有装 Word 是用不了的。 ?2. 文档里有宏的、被保护的,可能转不了有些文档打开会弹窗提示宏或者密码,那个得手动改设置,程序跑不过去。 ?3. 文件名不要太长、路径不要有中文 / 空格有时候路径太奇怪,Word 会打不开,转不了,建议统一放到纯英文文件夹里。 ??额外加点料自动生成时间戳文件夹 + 输出日志自动获取脚本所在目录下的 Word 文件(不需要用户手动输路径)判断电脑里是否装了 Office(Word)或 WPS,并自动选对的调用方式打包售卖?? 一、生成时间戳文件夹def gen_output_folder(): folder = os.path.dirname(os.path.abspath(__file__)) timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") output_folder = os.path.join(folder, f"pdf_{timestamp}") os.makedirs(output_folder, exist_ok=True) return output_folder ?? 二、自动获取当前脚本目录下的 Word 文件这太简单了: import os def get_word_files_from_current_folder(): folder = os.path.dirname(os.path.abspath(__file__)) word_files = [] for file in os.listdir(folder): if file.endswith(".doc") or file.endswith(".docx"): word_files.append(os.path.join(folder, file)) return word_files ?? 三、检测 Office 和 WPS 的方法我们可以尝试用win32com.client.gencache.EnsureDispatch()去判断这两个程序是否存在。 import win32com.client def detect_office_or_wps(): try: word = win32com.client.gencache.EnsureDispatch("Word.Application") return "office" except: try: wps = win32com.client.gencache.EnsureDispatch("Kwps.Application") return "wps" except: return None ?? 四、自动选择引擎并批量转换import os import win32com.client def convert_word_to_pdf_auto(input_path, output_path, engine): if engine == "office": app = win32com.client.Dispatch("Word.Application") elif engine == "wps": app = win32com.client.Dispatch("Kwps.Application") else: print("? 没有检测到可用的 Office 或 WPS") return app.Visible = False try: doc = app.Documents.Open(input_path) doc.SaveAs(output_path, FileFormat=17) doc.Close() print(f"? 转换成功:{input_path}") except Exception as e: print(f"? 转换失败:{input_path},原因:{e}") try: app.Quit() except: print("?? 当前环境不支持 Quit,跳过退出。") ?? 五、整合所有内容,一键搞定脚本所在目录下的所有 Word 文件def batch_convert_here(): engine = detect_office_or_wps() if not engine: print("?? 系统里没有安装 Office 或 WPS,没法转换") return folder = os.path.dirname(os.path.abspath(__file__)) word_files = get_word_files_from_current_folder() if not word_files: print("???♀? 当前文件夹没有发现 Word 文件") return output_folder = os.path.join(folder, "pdf输出") os.makedirs(output_folder, exist_ok=True) for word_file in word_files: filename = os.path.splitext(os.path.basename(word_file))[0] pdf_path = os.path.join(output_folder, f"{filename}.pdf") convert_word_to_pdf_auto(word_file, pdf_path, engine) print("?? 所有文件转换完成啦!PDF 都在 'pdf输出' 文件夹里") 「?? 运行方式(放在脚本结尾):」 if __name__ == "__main__": batch_convert_here() ??六、 做成 EXE 给小白用户用(pyinstaller)最后一步,把咱的脚本打包成.exe,丢到某鱼卖钱(手动狗头??) 命令就一句话: pyinstaller -F word2pdf.py 生成的dist/word2pdf.exe就是可执行文件,随便拿给谁用都行(当然系统要有 Word)。 完整代码import os import win32com.client import sys import datetime def get_real_path(): """兼容开发与打包环境的路径获取""" if getattr(sys, 'frozen', False): base_dir = os.path.dirname(sys.executable) # EXE文件所在目录[1,7](@ref) else: base_dir = os.path.dirname(os.path.abspath(__file__)) return base_dir # 生成时间戳文件夹 def gen_output_folder(folder): # folder = os.path.dirname(os.path.abspath(__file__)) timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") output_folder = os.path.join(folder, f"pdf_{timestamp}") os.makedirs(output_folder, exist_ok=True) return output_folder # 自动获取当前脚本目录下的 Word 文件 def get_word_files_from_current_folder(folder): # folder = os.path.dirname(os.path.abspath(__file__)) word_files = [] for file in os.listdir(folder): if file.endswith(".doc") or file.endswith(".docx"): word_files.append(os.path.join(folder, file)) return word_files # 检测 Office 和 WPS 的方法 def detect_office_or_wps(): try: word = win32com.client.gencache.EnsureDispatch("Word.Application") return "office" except: try: wps = win32com.client.gencache.EnsureDispatch("Kwps.Application") return "wps" except: return None # 自动选择引擎并批量转换 def convert_word_to_pdf_auto(input_path, output_path, engine): if engine == "office": app = win32com.client.Dispatch("Word.Application") elif engine == "wps": app = win32com.client.Dispatch("Kwps.Application") else: print("没有检测到可用的 Office 或 WPS") return app.Visible = False try: doc = app.Documents.Open(input_path) doc.SaveAs(output_path, FileFormat=17) doc.Close() print(f"转换成功:{input_path}") except Exception as e: print(f"转换失败:{input_path},原因:{e}") try: app.Quit() except: print("当前环境不支持 Quit,跳过退出。") # 主函数 def batch_convert_here(): engine = detect_office_or_wps() if not engine: print("系统里没有安装 Office 或 WPS,没法转换") return folder = get_real_path() word_files = get_word_files_from_current_folder(folder) if not word_files: print("当前文件夹没有发现 Word 文件") return output_folder = gen_output_folder(folder) for word_file in word_files: filename = os.path.splitext(os.path.basename(word_file))[0] pdf_path = os.path.join(output_folder, f"{filename}.pdf") convert_word_to_pdf_auto(word_file, pdf_path, engine) print("所有文件转换完成啦!PDF 都在 'output_folder' 文件夹里") if __name__ == "__main__": try: batch_convert_here() print("按 Enter 键退出...") input() # 等待用户按 Enter 键 except Exception as e: print(e) print("程序运行错误,按 Enter 键退出...") input() # 等待用户按 Enter 键 你可能觉得:“这不就是几十行代码嘛,卖这个会有人买吗?” 我一开始也这么想。后来我想通了,某鱼上很多买家,根本不懂技术,他们在意的是: ? 能不能一键搞定? ? 会不会太复杂? ? 省不省事? 所以啊,「写工具 + 提供说明 + 包装打包」,这些就构成了 “产品”。 我们程序员有时候太低估自己的能力了——其实你随手写的脚本,真的能解决很多人的问题。 AI编程资讯AI Coding专区指南:https://aicoding.juejin.cn/aicoding 点击"阅读原文"了解详情~ 阅读原文

上一篇:2022-07-11_英伟达用AI设计GPU算术电路,面积比最先进EDA减少25%,速度更快、更加高效 下一篇:2022-10-08_摄影师,这些“镜头镀膜”知识,不许你不知道

TAG标签:

18
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价