PySimpleGUI图形化界面实现Office文件格式转换

news2025/1/11 2:54:34

PySimpleGUI图形化界面实现Office文件格式转换

  • Python实现三种文件两个版本的格式转换
    • 1、doc与docx格式互相转换
    • 2、xls与xlsx格式互相转换
    • 3、ppt与pptx格式互相转换
  • Python+PySimpleGUI实现综合版本

Python实现三种文件两个版本的格式转换

1、doc与docx格式互相转换

这里主要运用了Win32com来实现两种文件格式转换,后续也是一样的

# -*- coding:utf-8 -*-
# -*- Author:valecalida -*-
from os import path
from win32com import client


class DocWithDocx(object):
    def __init__(self, filename, out_path):
        self.filename = (str(filename).strip().replace("/", "\\"))
        self.f_name = path.split(self.filename)[-1]
        self.out_path = str(out_path).strip().replace("/", "\\") + "\\"
        self.final_name = self.out_path + self.f_name

    def doc2docx(self):
        word = client.Dispatch('Word.Application')
        word.DisplayAlerts = False
        doc = word.Documents.Open(self.filename)
        doc.SaveAs(self.final_name + "x", 12)
        doc.Close()
        word.Quit()

    def docx2doc(self):
        word = client.Dispatch('Word.Application')
        word.DisplayAlerts = False
        doc = word.Documents.Open(self.filename)
        doc.SaveAs(self.final_name[:-1], 0)
        doc.Close()
        word.Quit()

2、xls与xlsx格式互相转换

# -*- coding:utf-8 -*-
# -*- Author:valecalida -*-
import win32com.client as win32
from os import path


class XLSWithXLSX(object):
    def __init__(self, filename, out_path):
        self.filename = (str(filename).strip().replace("/", "\\"))
        self.f_name = path.split(self.filename)[-1]
        self.out_path = str(out_path).strip().replace("/", "\\") + "\\"
        self.final_name = self.out_path + self.f_name

    def xls2xlsx(self):
        excel = win32.gencache.EnsureDispatch('Excel.Application')
        excel.DisplayAlerts = False
        wb = excel.Workbooks.Open(fname)
        wb.CheckCompatibility = False
        wb.DoNotPromptForConvert = True
        wb.SaveAs(self.final_name + "x", FileFormat=51)  # FileFormat = 51 is for .xlsx extension
        wb.Close()  # FileFormat = 56 is for .xls extension
        excel.Application.Quit()

    def xlsx2xls(self):
        excel = win32.gencache.EnsureDispatch('Excel.Application')
        excel.DisplayAlerts = False
        wb = excel.Workbooks.Open(fname)
        wb.CheckCompatibility = False
        wb.DoNotPromptForConvert = True
        wb.SaveAs(self.final_name[:-1], FileFormat=56)
        # FileFormat = 56 is for .xls extension
        wb.Close()
        excel.Application.Quit()

3、ppt与pptx格式互相转换

# -*- coding:utf-8 -*-
# -*- Author:valecalida -*-
import win32com.client
from os import path


class PPTWithPPTX(object):
    def __init__(self, filename, out_path):
        self.filename = (str(filename).strip().replace("/", "\\"))
        self.f_name = path.split(self.filename)[-1]
        self.out_path = str(out_path).strip().replace("/", "\\") + "\\"
        self.final_name = self.out_path + self.f_name

    def ppt2pptx(self):
        ppt_app = win32com.client.Dispatch("Powerpoint.Application")
        ppt_presentation = ppt_app.Presentations.Open(self.filename)
        ppt_presentation.SaveAs(self.final_name + "x", FileFormat=24)
        ppt_presentation.close()
        ppt_app.Quit()

    def pptx2ppt(self):
        ppt_app = win32com.client.Dispatch("Powerpoint.Application")
        ppt_presentation = ppt_app.Presentations.Open(self.filename)
        ppt_presentation.SaveAs(self.final_name[:-1])
        ppt_presentation.close()
        ppt_app.Quit()

Python+PySimpleGUI实现综合版本

上面已经实现了每个文件格式的单独转换,现在只需要加上图形化界面就可以了,直接上代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# -*- Author:valecalida -*-
import win32com.client as win32
from os import path
import PySimpleGUI as sg


class OfficeFormatConversion(object):
    def __init__(self, filename, out_path):
        self.filename = (str(filename).strip().replace("/", "\\"))
        self.f_name = path.split(self.filename)[-1]
        self.out_path = str(out_path).strip().replace("/", "\\") + "\\"
        self.final_name = self.out_path + self.f_name

    def xls2xlsx(self):
        excel = win32.gencache.EnsureDispatch('Excel.Application')
        excel.DisplayAlerts = False
        wb = excel.Workbooks.Open(self.filename)
        wb.CheckCompatibility = False
        wb.DoNotPromptForConvert = True
        wb.SaveAs(self.final_name + "x", FileFormat=51)  # FileFormat = 51 is for .xlsx extension
        wb.Close()  # FileFormat = 56 is for .xls extension
        excel.Application.Quit()

    def xlsx2xls(self):
        excel = win32.gencache.EnsureDispatch('Excel.Application')
        excel.DisplayAlerts = False
        wb = excel.Workbooks.Open(self.filename)
        wb.CheckCompatibility = False
        wb.DoNotPromptForConvert = True
        wb.SaveAs(self.final_name[:-1], FileFormat=56)
        wb.Close()
        excel.Application.Quit()

    def ppt2pptx(self):
        ppt_app = win32.Dispatch("Powerpoint.Application")
        ppt_presentation = ppt_app.Presentations.Open(self.filename)
        ppt_presentation.SaveAs(self.final_name + "x", FileFormat=24)
        ppt_presentation.close()
        ppt_app.Quit()

    def pptx2ppt(self):
        ppt_app = win32.Dispatch("Powerpoint.Application")
        ppt_presentation = ppt_app.Presentations.Open(self.filename)
        ppt_presentation.SaveAs(self.final_name[:-1])
        ppt_presentation.close()
        ppt_app.Quit()

    def doc2docx(self):
        word = win32.Dispatch('Word.Application')
        word.DisplayAlerts = False
        doc = word.Documents.Open(self.filename)
        doc.SaveAs(self.final_name + "x", 12)
        doc.Close()
        word.Quit()

    def docx2doc(self):
        word = win32.Dispatch('Word.Application')
        word.DisplayAlerts = False
        doc = word.Documents.Open(self.filename)
        doc.SaveAs(self.final_name[:-1], 0)
        doc.Close()
        word.Quit()


class OfficeFormatConversionGUI(object):
    def __init__(self):
        self.bgc = "#9C221D"
        self.btc = "#9C221D on #FFF6F5"
        self.FONT = ("微软雅黑", 16)
        self.format_list = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"]
        self.layout = [
            [sg.Text("请选择您要转换的Office文件: ", font=self.FONT, background_color=self.bgc)],
            [
                sg.Input("", key="_FILES_", font=self.FONT, size=(36, 1), text_color=self.bgc, disabled_readonly_background_color="#FFF6F5"),
                sg.FilesBrowse("选择文件", font=self.FONT, size=(10, 1), button_color=self.btc)],
            [
                sg.Text("(非必选)把这些文件格式从: ", font=self.FONT, size=(20, 1), background_color=self.bgc),
                sg.Combo(self.format_list, key="-DATA1-", font=self.FONT, size=(5, 6), default_value="请选择", enable_events=True, button_arrow_color=self.bgc, text_color=self.bgc,
                          background_color="#FFF6F5", button_background_color="#FFF6F5"),
                sg.Text("转换为: ", font=self.FONT, background_color=self.bgc),
                sg.Input("", key="-DATA2-", font=self.FONT, size=(4, 6), text_color=self.bgc, disabled_readonly_background_color="#FFF6F5"),
            ],
            [sg.Text("转换后的文件将保存到:", font=self.FONT, background_color=self.bgc)],
            [
                sg.Input("", key="-FOLDER-", font=self.FONT, size=(36, 1)),
                sg.FolderBrowse("选择文件夹", font=self.FONT, size=(10, 1), button_color=self.btc)
            ],
            [sg.Text("",background_color=self.bgc)],
            [
                sg.Button("点我自动处理", key="-AUTO-", font=self.FONT, size=(10, 1), button_color=self.btc),
                sg.Button("点我开始转换", key="-SUBMIT-", font=self.FONT, size=(10, 1), button_color=self.btc),
                sg.Button("点我返回主页", key="-MAIN-", font=self.FONT, size=(10, 1), button_color=self.btc),
                sg.Button("点我显示帮助", key="-HELP-", font=self.FONT, size=(10, 1), button_color=self.btc)
            ],
            [
                sg.Output(size=(80, 8), sbar_background_color="#9C221D", text_color="#9C221D",
                           sbar_frame_color="#9C221D", sbar_trough_color="#FFF6F5", background_color="#FFF6F5")
            ]
        ]
        self.window = sg.Window(title="Office格式转换", layout=self.layout, background_color=self.bgc, finalize=True)

    def run(self):
        while True:
            event, values = self.window.Read()
            # print(event, values)
            if event == "-DATA1-":
                if values["-DATA1-"] == "docx":
                    self.window.Element("-DATA2-").Update("doc")
                elif values["-DATA1-"] == "doc":
                    self.window.Element("-DATA2-").Update("docx")
                elif values["-DATA1-"] == "xls":
                    self.window.Element("-DATA2-").Update("xlsx")
                elif values["-DATA1-"] == "xlsx":
                    self.window.Element("-DATA2-").Update("xls")
                elif values["-DATA1-"] == "ppt":
                    self.window.Element("-DATA2-").Update("pptx")
                elif values["-DATA1-"] == "pptx":
                    self.window.Element("-DATA2-").Update("ppt")
            elif event == "-SUBMIT-":
                files = (str(values["_FILES_"]).strip()).split(";")
                try:
                    files.remove("")
                except ValueError:
                    pass
                data = str(values["-DATA1-"]).strip()
                out_path = str(values["-FOLDER-"]).strip()
                # print(files, data, out_path)
                # print(event, values)
                if len(files) >= 1:
                    if data != "请选择":
                        if out_path:
                            for file in files:
                                try:
                                    if data == "doc":
                                        OfficeFormatConversion(file, out_path).doc2docx()
                                    elif data == "docx":
                                        OfficeFormatConversion(file, out_path).docx2doc()
                                    elif data == "xls":
                                        OfficeFormatConversion(file, out_path).xls2xlsx()
                                    elif data == "xlsx":
                                        OfficeFormatConversion(file, out_path).xlsx2xls()
                                    elif data == "ppt":
                                        OfficeFormatConversion(file, out_path).ppt2pptx()
                                    elif data == "pptx":
                                        OfficeFormatConversion(file, out_path).pptx2ppt()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功")
                                except FileNotFoundError:
                                    print("[-] 看起来在有些文件在转换之前被移动了,请核实")
                                except PermissionError:
                                    print("[-] 请查看您选择保存的文件夹是否允许写入文件")
                        else:
                            print("[-] 您尚未选择将转换后的文件保存到哪")
                    else:
                        print("[-] 您尚未选择要进行格式转换的文件格式")
                else:
                    print("[-] 您尚未选择要进行格式转换的文件")
            elif event == "-HELP-":
                evo, _ = sg.Window("Office批量格式转换——操作帮助提示",
                                   [
                                       [sg.Multiline(
                                           """
                                           1
                                           2
                                           3
                                           4
                                           5
                                           6
                                           7
                                           """,
                                           size=(56, 6))],
                                       [sg.Button("我已知晓", size=(8, 1)), sg.Button("退出程序", size=(8, 1))]
                                   ], element_justification="center", font=("微软雅黑", 13, "bold"), ).read(close=True)

                if evo == "我已知晓":
                    continue
                elif evo == sg.WIN_CLOSED or evo == "Exit" or evo is None:
                    continue
                else:
                    exit()
            elif event == "-AUTO-":
                files = (str(values["_FILES_"]).strip()).split(";")
                try:
                    files.remove("")
                except ValueError:
                    pass
                out_path = str(values["-FOLDER-"]).strip()
                if len(files) >= 1:
                    if out_path:
                        for file in files:
                            try:
                                if file.endswith("doc"):
                                    print(f"[~] 识别到{path.split(file)[-1]} 为 doc 文件,开始转换")
                                    OfficeFormatConversion(file, out_path).doc2docx()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功 docx 格式")
                                elif file.endswith("docx"):
                                    print(f"[~] 识别到{path.split(file)[-1]} 为 docx 文件,开始转换")
                                    OfficeFormatConversion(file, out_path).docx2doc()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功 doc 格式")
                                elif file.endswith("xls"):
                                    print(f"[~] 识别到{path.split(file)[-1]} 为 xls 文件,开始转换")
                                    OfficeFormatConversion(file, out_path).xls2xlsx()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功 xlsx 格式")
                                elif file.endswith("xlsx"):
                                    print(f"[~] 识别到{path.split(file)[-1]} 为 xlsx 文件,开始转换")
                                    OfficeFormatConversion(file, out_path).xlsx2xls()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功 xls 格式")
                                elif file.endswith("ppt"):
                                    print(f"[~] 识别到{path.split(file)[-1]} 为 ppt 文件,开始转换")
                                    OfficeFormatConversion(file, out_path).ppt2pptx()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功 pptx 格式")
                                elif file.endswith("pptx"):
                                    print(f"[~] 识别到{path.split(file)[-1]} 为 pptx 文件,开始转换")
                                    OfficeFormatConversion(file, out_path).pptx2ppt()
                                    print(f"[+] {path.split(file)[-1]} 已转换成功 ppt 格式")

                            except FileNotFoundError:
                                print("[-] 看起来在有些文件在转换之前被移动了,请核实")
                            except PermissionError:
                                print("[-] 请查看您选择保存的文件夹是否允许写入文件")
                    else:
                        print("[-] 您尚未选择将转换后的文件保存到哪")
                else:
                    print("[-] 您尚未选择要进行格式转换的文件")
            elif event == sg.WIN_CLOSED or event == "Exit" or event is None:
                exit()


OfficeFormatConversionGUI().run()

本人的代码能力有限,仅供各位看官娱乐,最终运行效果为:
在这里插入图片描述
如对程序有建议可直接评论或私聊~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

excel求和技巧:如何忽略错误值进行求和

按照对应的订单号引用已有的收货金额,这种问题相信很多朋友都会处理,用VLOOKUP函数就能搞定。我们今天要讨论的是如何对含有错误值的数据进行求和。如果直接求和,得到的结果也是一个错误值,如下图:对于这种要对含有错误…

Linux驱动开发基础__ Linux中断系统中的重要数据结构

目录 1 整体概述 2 irq_desc 数组 3 irqaction 结构体 4 irq_data 结构体 5 irq_domain 结构体 6 irq_chip 结构体 1 整体概述 该文章内容,可以从 request_irq(include/linux/interrupt.h)函数一路分析得到。 能弄清楚下面这个图,对 Linux 中…

Domino Nomad Web 1.0.6!

大家好,才是真的好。 虽然Domino Notes 9.0.x版本早前宣布从本月开始停止市场商业推广,并逐步停止技术支持服。但没让人意外的是,12月5号,HCL更新了一版Domino Notes 9.0.1版本的补丁程序FP10IF10: 没有任何额外的说…

车规级CAN FD收发器SIT1044Q,能替代TJA1044吗?

国际知名品牌NXP推出的TJA1042Q、TJA1043Q、TJA1044Q、TJA1051Q等CAN FD收发器芯片,相信很多电子工程师并不陌生。这类芯片应用中,非常成熟稳定,深受汽车电子工程师的认可、支持和青睐。然而,在实际应用中,很多客户由于…

新建文本文档

Spring Boot 加载外部配置文件 Spring Boot 允许你从外部加载配置,这样的话,就可以在不同的环境中使用相同的代码。支持的外部配置源包括:Java属性文件、YAML文件、环境变量、命令行参数。 用Value注解可以将属性值直接注入到beans中。命令行…

【win11环境编译安装deformable Detr的MultiScaleDeformableAttention模块】

Microsoft Visual C 14.0 is required.1.Compiling CUDA operators2.安装Build Tools for Visual Studio3.安装合适的cuda4.编译1.Compiling CUDA operators cd ./models/ops sh ./make.sh # unit test (should see all checking is True) python test.pyNote: win11 or win10…

经认定的闵行区企业技术中心给予10万元资助

闵行区企业技术中心一、主管部门闵行区经济委员会二、政策依据《闵行区关于推进先进制造业高质量发展的若干产业政策意见》(闵府规发〔2020〕5号)《闵行区企业技术中心认定管理办法》(闵经委规发〔2021〕2号)《关于申报认定2022年…

搭建Go环境 03

1、windows下搭建go环境 1、介绍SDK 1、SDK(软件开发工具包) 2、SDK是给开发人员使用的,其中包含了对应开发语言的工具包 2、下载SDK Go官方镜像站(国内用户推荐): https://golang.google.cn/dl/ 官网下载 https://golang.org/dl/ # 安装事项…

【参考答案】java基础练习:变量、数据类型、输入、输出、运算符

练习1:判断输入的值是否是偶数,另外,要处理输入错误 (目的:熟悉输入、输出,特别是Scanner对象的方法) package com.qzcsbj;import java.util.Scanner;public class Test {public static void main(String[] args) {Sca…

Hudi集成Spark(一)Spark Shell方式

文章目录环境准备安装 Spark启动 Hadoop(略)spark-shell 方式启动 spark-shell插入数据查询数据查询数据更新数据增量查询指定时间点查询删除数据覆盖数据环境准备 安装 Spark 1)Hudi 支持的 Spark 版本 HudiSupported Spark 3 version0.1…

131页8万字数字化矿山整体解决方案

【版权声明】本资料来源网络,知识分享,仅供个人学习,请勿商用。 【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间删除! 完整资料领取见文末,部分资料内容: 目 录 1、煤矿综合自动化系统…

两台 mac 通过 scp 命令快速传输数据

这两天由于电脑进水了,所以申请换了一台 mac 电脑,所以想把老电脑的数据拷贝到新电脑,折腾了半天,最后还是发现 scp 命令最好用。 使用 「scp 命令方式」之前尝试的其他方法 1、隔空投送 刚开始使用那个隔空投送功能,但…

数据结构与算法(一)——时间复杂度和空间复杂度

时间复杂度 1、概念引入 先说结论:时间复杂度是用来估计算法运行时间的一个式子(单位)。 例如:这四组代码,哪组运行时间最短? q:我们该用什么方式来体现算法运行的快慢? a&#…

安卓apk包破解

安卓apk包破解前言一、前置工作二、正式开始前言 拿到安卓的apk包如何,如何破解呢。流程如下 一、前置工作 拿到一个apk文件,修改其后缀为zip 例如: test.apk > test.zip 使用解压工具进行解压。解压后如图 获取到原始文件目录&…

Django项目——通过APIView实现API访问,增删改查数据库

前提 该文章在已有项目的基础上进行修改 https://blog.csdn.net/qq_38122800/article/details/128583379?spm1001.2014.3001.5502 1、配置序列化器 序列化器包含序列化和反序列化两个过程,简单点理解就是 序列化 : 将从数据库中查的数据变为前端页面可以接受的json数据 反…

机器学习的逻辑回归(Logistic)的实例————预测学生是否被录取

目录要求代码1. 导入模块2. 导入数据3. 求解theat的最优值,画出样本的位置和决策边界。4. 画出迭代函数随迭代次数变化的曲线,代价函数最终的收敛值5.比较三种学习率的代价函数随迭代次数变化的曲线5.1 学习率为0.00035.2 学习率为0.00055.3 学习率为0.00001要求 代码 1. 导入…

PySpark和RDD对象详解

目录 一.了解Spark、PySpark Spark是什么 Python on Spark Pyspark 小结 二.构建PySpark执行环境入口对象 PySpark的编程模型 小结 三.RDD对象 python数据容器转RDD对象 注意 演示 读取文件转RDD对象 演示 一.了解Spark、PySpark Spark是什么 定义:Apache Spark是用…

计算机组成原理【2】

文章目录一 计算机系统的层次结构1.1 思维导图1.2 计算机机器的五个层次1.3 三种级别的语言1.4 区分计算机组成原理和计算机体系二 计算机性能指标2.1 思维导图2.2 主存储器性能指标2.3 CPU性能指标2.4 系统整体的性能指标2.5 系统整体性能指标【动态测试】三 进位计数制3.1 思…

springboot整合opencv进行灰度图像与RGB图像互转

问题: 在开发过程中遇到一个问题,需要在图片上加上数据(原卷留痕),由于图片是灰度的,无法进行彩色编辑,需要将灰度图片转成RGB图片,才能进行彩色编辑,于是想到用opencv进…

Grafana 告警模块介绍

Grafana 系列文章,版本:OOS v9.3.1 Grafana 的介绍和安装Grafana监控大屏配置参数介绍(一)Grafana监控大屏配置参数介绍(二)Grafana监控大屏可视化图表Grafana 查询数据和转换数据Grafana 告警模块介绍 Gra…