本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴

前言

作为一名程序员学生,我选择在本地实现批量转换 PPT、Excel、Word 为 PDF 文件的工具,是被在线转换平台的 “坑” 给逼出来的。之前帮导师整理课程资料,几百份文件要转 PDF,用在线工具试了个遍:要么免费版只能转 10 页,要么高清转换要充会员,算下来费用都够买杯奶茶了。更离谱的是,上传含实验数据的 Excel 时,总担心信息泄露,毕竟这些数据可能关系到项目成果。而且学校机房网络不稳定,好几次转换到一半卡住,只能重新排队,太耽误时间。如下图,必须得进行vip的充值才能进行pdf的转换操作,对于学生党很不友好的
image.png

自己开发本地工具就不一样了,所有文件都在本地处理,隐私安全有保障,也不用受网络和收费限制。批量处理功能还能一键搞定所有文件,省下来的时间我还能多刷两道算法题。

至于为什么用 CodeBuddy 来实现,这得归功于 AI 编程带来的 “开挂” 体验。刚接触文件转换开发时,我光是研究 Python 的python-pptx、openpyxl库的语法就头大,更别说处理多线程、文件路径映射这些复杂逻辑了。但 CodeBuddy 就像身边有个经验丰富的大哥,我只要输入 “批量将 Word 转为 PDF,保留原目录结构”,它就能快速生成代码框架。遇到字体渲染异常、文件损坏等问题,它还能根据报错信息分析原因,给出修复方案,大大减少了调试时间。
image.png

使用CodeBuddy进行功能的实现

我们先打开vscode进入到拓展中直接搜索CodeBuddy,点击安装这个插件就行了
image.png
我们先在chat模式生成出对应的README文件
对ai说:

我想在想实现一个应用,用来批量转换PPT、Excel、Word为PDF文件工具,请帮我生成详细的README文件

效果如下:
image.png
然后我们在Craft模式输入

@README.md 根据文件进行开发

CodeBuddy根据文件内的描述迅速进行程序的生成操作
分析程序架构,创建合适的代码
image.png
经过几轮调试,测试如下
image.png
代码如下,感兴趣可自行去体验

import os, win32com.client, gc

# Word

def word2Pdf(filePath, words):

    # 如果没有文件则提示后直接退出

    if(len(words)<1):

        print ("\n【无 Word 文件】\n")

        return

    # 开始转换

    print ("\n【开始 Word -> PDF 转换】")

    try:

        print ("打开 Word 进程...")

        word = win32com.client.Dispatch("Word.Application")

        word.Visible = 0

        word.DisplayAlerts = False

        doc = None

        for i in range(len(words)):

            print(i)

            fileName = words[i] # 文件名称

            fromFile = os.path.join(filePath, fileName) # 文件地址

            toFileName = changeSufix2Pdf(fileName) # 生成的文件名称

            toFile = toFileJoin(filePath,toFileName) # 生成的文件地址

            print ("转换:"+fileName+"文件中...")

            # 某文件出错不影响其他文件打印

            try:

                doc = word.Documents.Open(fromFile)

                doc.SaveAs(toFile,17) # 生成的所有 PDF 都会在 PDF 文件夹中

                print ("转换到:"+toFileName+"完成")

            except Exception as e:

                print(e)

            # 关闭 Word 进程

        print ("所有 Word 文件已打印完毕")

        print ("结束 Word 进程...\n")

        doc.Close()

        doc = None

        word.Quit()

        word = None

    except Exception as e:

        print(e)

    finally:

        gc.collect()

# Excel

def excel2Pdf(filePath, excels):

    # 如果没有文件则提示后直接退出

    if(len(excels)<1):

        print ("\n【无 Excel 文件】\n")

        return

    # 开始转换

    print ("\n【开始 Excel -> PDF 转换】")

    try:

        print ("打开 Excel 进程中...")

        excel = win32com.client.Dispatch("Excel.Application")

        excel.Visible = 0

        excel.DisplayAlerts = False

        wb = None

        ws = None

        for i in range(len(excels)):

            print(i)

            fileName = excels[i] # 文件名称

            fromFile = os.path.join(filePath, fileName) # 文件地址

            print ("转换:"+fileName+"文件中...")

            # 某文件出错不影响其他文件打印

            try:

                wb = excel.Workbooks.Open(fromFile)

                for j in range(wb.Worksheets.Count): # 工作表数量,一个工作簿可能有多张工作表

                    toFileName = addWorksheetsOrder(fileName, j+1) # 生成的文件名称

                    toFile = toFileJoin(filePath,toFileName) # 生成的文件地址                    

                    ws = wb.Worksheets(j+1) # 若为[0]则打包后会提示越界

                    ws.PageSetup.Orientation=2 # 设置页面方向,纵向=1,横向=2

                    ws.ExportAsFixedFormat(0,toFile) # 每一张都需要打印

                    print ("转换至:"+toFileName+"文件完成")

            except Exception as e:

                print(e)

        # 关闭 Excel 进程

        print ("所有 Excel 文件已打印完毕")

        print ("结束 Excel 进程中...\n")

        ws = None

        wb.Close()

        wb = None

        excel.Quit()

        excel = None

    except Exception as e:

        print(e)

    finally:

        gc.collect()

# PPT

def ppt2Pdf(filePath, ppts):

    # 如果没有文件则提示后直接退出

    if(len(ppts)<1):

        print ("\n【无 PPT 文件】\n")

        return

    # 开始转换

    print ("\n【开始 PPT -> PDF 转换】")

    try:

        print ("打开 PowerPoint 进程中...")

        powerpoint = win32com.client.Dispatch("PowerPoint.Application")

        ppt = None

        # 某文件出错不影响其他文件打印

        for i in range(len(ppts)):

            print(i)

            fileName = ppts[i] # 文件名称

            fromFile = os.path.join(filePath, fileName) # 文件地址

            toFileName = changeSufix2Pdf(fileName) # 生成的文件名称

            toFile = toFileJoin(filePath,toFileName) # 生成的文件地址

            print ("转换:"+fileName+"文件中...")

            try:

                ppt = powerpoint.Presentations.Open(fromFile,WithWindow=False)

                if ppt.Slides.Count>0:

                    ppt.SaveAs(toFile, 32) # 如果为空则会跳出提示框(暂时没有找到消除办法)

                    print ("转换至:"+toFileName+"文件完成")

                else:

                    print("(错误,发生意外:此文件为空,跳过此文件)")

            except Exception as e:

                print(e)

        # 关闭 PPT 进程

        print ("所有 PPT 文件已打印完毕")

        print ("结束 PowerPoint 进程中...\n")

        ppt.Close()

        ppt = None

        powerpoint.Quit()

        powerpoint = None

    except Exception as e:

        print(e)

    finally:

        gc.collect()

# 修改后缀名

def changeSufix2Pdf(file):

    return file[:file.rfind('.')]+".pdf"

# 添加工作簿序号

def addWorksheetsOrder(file, i):

    return file[:file.rfind('.')]+"_工作表"+str(i)+".pdf"

# 转换地址

def toFileJoin(filePath,file):

    return os.path.join(filePath,'pdf',file[:file.rfind('.')]+".pdf")

# 开始程序

print ("====================程序开始====================")

print ("【程序功能】将目标路径下内所有的 ppt、excel、word 均生成一份对应的 PDF 文件,存在新生成的 pdf 文件夹中(需已经安装office,不包括子文件夹)")

print ("注意:若某 PPT 和 Excel 文件为空,则会出错跳过此文件。若转换 PPT 时间过长,请查看是否有报错窗口等待确认,暂时无法彻底解决 PPT 的窗口问题。在关闭进程过程中,时间可能会较长,十秒左右,请耐心等待。")

filePath = input ("输入目标路径:(若为当前路径:"+os.getcwd()+",请直接回车)\n")

# 目标路径,若没有输入路径则为当前路径

if(filePath==""):

    filePath = os.getcwd()

# 将目标文件夹所有文件归类,转换时只打开一个进程

words = []

ppts = []

excels = []

for fn in os.listdir(filePath):

    if fn.endswith(('.doc', 'docx')):

        words.append(fn)

    if fn.endswith(('.ppt', 'pptx')):

        ppts.append(fn)

    if fn.endswith(('.xls', 'xlsx')):

        excels.append(fn)

# 调用方法

print ("====================开始转换====================")

# 新建 pdf 文件夹,所有生成的 PDF 文件都放在里面

folder = filePath + '\\pdf\\'

if not os.path.exists(folder):

    os.makedirs(folder)

word2Pdf(filePath,words)

excel2Pdf(filePath,excels)

ppt2Pdf(filePath,ppts)

print ("====================转换结束====================")

print ("\n====================程序结束====================")

os.system("pause")

总结

通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把


Undoom
1 声望0 粉丝