Python实现将Word和Excel文件转换为PPT

 更新时间:2024年08月11日 10:55:03   作者:winfredzhang  
在日常工作中,我们经常需要将多个Word文档或Excel表格的内容汇总到一个PPT演示文稿中,手动执行这项任务可能非常耗时,因此,使用Python自动化这个过程可以大大提高效率,所以本文给大家介绍了Python实现将Word和Excel文件转换为PPT,需要的朋友可以参考下

前言

在日常工作中,我们经常需要将多个Word文档或Excel表格的内容汇总到一个PPT演示文稿中。手动执行这项任务可能非常耗时,因此,使用Python自动化这个过程可以大大提高效率。在这篇博客中,我将介绍如何使用wxPython创建一个图形用户界面(GUI),选择文件夹、遍历文件,并将Word和Excel文档的内容导出为PPT文件。

环境准备

在开始之前,确保已安装以下Python库:

  • wxPython:用于创建图形用户界面。
  • python-pptx:用于生成PowerPoint文件。
  • pywin32:用于与Word和Excel文件进行交互。

使用以下命令安装这些依赖项:

pip install wxPython python-pptx pywin32

功能需求

该应用程序的核心功能如下:

  1. 选择文件夹并遍历文件:用户可以选择一个包含Word和Excel文件的文件夹,程序会自动遍历所有文件并将其显示在一个列表框(ListBox)中。

  2. 文件排序:用户可以通过拖拽调整文件在列表中的顺序。

  3. 导出到PPT:点击导出按钮后,程序会将列表框中的文件按照顺序,每个文件的内容插入一个PPT页面,并将生成的PPT文件保存在相同的文件夹中。

程序实现

以下是完整的代码实现:

import wx
import os
from pptx import Presentation
from pptx.util import Inches
from win32com.client import Dispatch
import pythoncom

class FilePickerApp(wx.Frame):
    def __init__(self, parent, title):
        super(FilePickerApp, self).__init__(parent, title=title, size=(800, 600))

        panel = wx.Panel(self)

        # Create buttons and ListBox
        self.select_folder_btn = wx.Button(panel, label="Select Folder", pos=(10, 10))
        self.export_btn = wx.Button(panel, label="Export to PPT", pos=(680, 10))
        self.file_listbox = wx.ListBox(panel, pos=(10, 50), size=(760, 450), style=wx.LB_SINGLE)

        # Bind events
        self.select_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_folder)
        self.export_btn.Bind(wx.EVT_BUTTON, self.on_export)

        # Enable drag-and-drop reordering in ListBox
        self.file_listbox.Bind(wx.EVT_LISTBOX_DCLICK, self.on_drag_drop)

        self.Show()

    def on_select_folder(self, event):
        with wx.DirDialog(self, "Select a folder", style=wx.DD_DEFAULT_STYLE) as dlg:
            if dlg.ShowModal() == wx.ID_OK:
                folder_path = dlg.GetPath()
                self.populate_listbox(folder_path)

    def populate_listbox(self, folder_path):
        self.file_listbox.Clear()
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                if file.endswith(('.docx', '.xlsx')):
                    self.file_listbox.Append(os.path.join(root, file))

    def on_drag_drop(self, event):
        # Implement drag-and-drop reordering
        selected = self.file_listbox.GetSelection()
        if selected != wx.NOT_FOUND:
            item = self.file_listbox.GetString(selected)
            dlg = wx.TextEntryDialog(self, 'Reorder:', 'Enter new position', str(selected + 1))
            if dlg.ShowModal() == wx.ID_OK:
                new_pos = int(dlg.GetValue()) - 1
                self.file_listbox.Delete(selected)
                self.file_listbox.InsertItems([item], new_pos)
            dlg.Destroy()

    def on_export(self, event):
        file_paths = self.file_listbox.GetItems()
        if file_paths:
            prs = Presentation()
            for file_path in file_paths:
                slide = prs.slides.add_slide(prs.slide_layouts[5])
                shape = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(8), Inches(5.5))
                
                try:
                    if file_path.endswith('.docx'):
                        pythoncom.CoInitialize()
                        word = Dispatch('Word.Application')
                        word.Visible = False
                        doc = word.Documents.Open(file_path)
                        text = doc.Content.Text
                        doc.Close()
                        word.Quit()
                    elif file_path.endswith('.xlsx'):
                        pythoncom.CoInitialize()
                        excel = Dispatch('Excel.Application')
                        excel.Visible = False
                        wb = excel.Workbooks.Open(file_path)
                        ws = wb.Worksheets(1)
                        text = '\n'.join(['\t'.join([str(cell) for cell in row]) for row in ws.UsedRange.Value])
                        wb.Close()
                        excel.Quit()

                    shape.text = text

                except Exception as e:
                    wx.MessageBox(f"Failed to process file {file_path}.\nError: {str(e)}", "Error", wx.OK | wx.ICON_ERROR)
                    continue

            save_path = os.path.join(os.path.dirname(file_paths[0]), 'exported_presentation.pptx')
            prs.save(save_path)
            wx.MessageBox(f"PPT exported to {save_path}", "Export Success", wx.OK | wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App(False)
    frame = FilePickerApp(None, "File to PPT Exporter")
    app.MainLoop()

代码解析

  • 用户界面:使用wxPython创建了一个简单的GUI,其中包含一个选择文件夹的按钮、一个用于显示文件的ListBox、和一个用于导出PPT的按钮。

  • 选择文件夹:通过wx.DirDialog,用户可以选择一个包含Word和Excel文件的文件夹。程序会自动遍历该文件夹及其子文件夹,并将所有Word和Excel文件添加到ListBox中。

  • 拖拽排序:通过双击ListBox中的某个文件,用户可以输入新位置,调整文件的顺序。

  • 导出PPT:当用户点击“导出为PPT”按钮时,程序会将ListBox中的文件内容按照顺序插入到PPT的每个页面,并将生成的PPT文件保存在相同的文件夹中。

错误处理

在导出PPT的过程中,可能会遇到各种错误,例如文件路径错误或Word/Excel应用程序无法启动。为此,我们添加了错误处理逻辑,确保在发生错误时,用户会收到错误信息,并且程序不会崩溃。

结果如下

总结

这篇博客展示了如何使用wxPython结合python-pptxpywin32,通过图形界面将多个Word和Excel文件的内容自动化地导出为PPT演示文稿。通过这种方法,你可以显著提高工作效率,避免繁琐的手动操作。

以上就是Python实现将Word和Excel文件转换为PPT的详细内容,更多关于Python Word和Excel转为PPT的资料请关注脚本之家其它相关文章!

相关文章

  • python自定义时钟类、定时任务类

    python自定义时钟类、定时任务类

    这篇文章主要为大家详细介绍了Python自定义时钟类、定时任务类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • python实现列表中最大最小值输出的示例

    python实现列表中最大最小值输出的示例

    今天小编就为大家分享一篇python实现列表中最大最小值输出的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 浅析Python自带性能强悍的标准库itertools

    浅析Python自带性能强悍的标准库itertools

    itertools是python内置的模块,使用简单且功能强大。这篇文章就主要介绍了通过itertools实现可迭代对象的无限迭代、有限迭代和排列组合。感兴趣的同学可以关注一下
    2021-12-12
  • python (logging) 日志按日期、大小回滚的操作

    python (logging) 日志按日期、大小回滚的操作

    这篇文章主要介绍了python (logging) 日志按日期、大小回滚的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python并查集Disjoint Set的具体使用

    Python并查集Disjoint Set的具体使用

    本文主要介绍了Python并查集Disjoint Set的具体使用,包括并查集的基本概念、实现方式、路径压缩和应用场景,并使用代码示例演示并查集的操作,感兴趣的可以了解一下
    2024-01-01
  • 对pandas处理json数据的方法详解

    对pandas处理json数据的方法详解

    今天小编就为大家分享一篇对pandas处理json数据的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • PyCharm Python Console中文输出乱码问题及解决

    PyCharm Python Console中文输出乱码问题及解决

    这篇文章主要介绍了PyCharm Python Console中文输出乱码问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)

    VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)

    这篇文章主要介绍了VSCode中autopep8无法运行问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 基于Python写个"点球大战"小游戏

    基于Python写个"点球大战"小游戏

    这篇文章主要为大家详细介绍了如何利用Python写个简单的"点球大战"小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • 利用python如何处理nc数据详解

    利用python如何处理nc数据详解

    目前很多数据以nc格式存储,下面这篇文章主要给大家介绍了关于利用python如何处理nc数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。需要的朋友们下面来一起看看吧
    2018-05-05

最新评论