当前位置: 代码网 > it编程>前端脚本>Python > Python实现Excel表格转置与翻译工具

Python实现Excel表格转置与翻译工具

2024年10月28日 Python 我要评论
介绍一个使用python编写的gui程序,该程序能够读取excel文件,将第一个列的数据转置,并将英文内容翻译成中文,最后保存到新的excel文件中。程序使用wxpython构建gui界面,panda

介绍一个使用python编写的gui程序,该程序能够读取excel文件,将第一个列的数据转置,并将英文内容翻译成中文,最后保存到新的excel文件中。程序使用wxpython构建gui界面,pandas处理excel数据,googletrans进行翻译。

c:\pythoncode\new\rotateexcel.py

一、 功能概述

该程序主要实现以下功能:

  • 选择excel文件: 用户可以通过gui界面选择需要处理的excel文件(.xlsx格式)。
  • 选择保存路径: 用户可以选择保存处理后文件的路径。
  • 转置与翻译: 程序读取excel文件,提取第一个列(从第二行开始)的数据,进行转置,并将英文内容翻译成中文。
  • 保存结果: 将翻译后的数据保存到新的excel文件中,文件名与原文件名相同,并在文件名后添加_translated后缀。
  • 错误处理: 程序包含错误处理机制,能够捕获并显示文件读取错误、翻译错误等异常信息。
  • 进度提示: 程序通过消息框提示用户操作进度(文件选择、保存路径选择、转换完成、错误提示等)。

全部代码

import wx
import pandas as pd
import os
from googletrans import translator

class exceltransposer(wx.frame):
    def __init__(self, *args, **kwargs):
        super(exceltransposer, self).__init__(*args, **kwargs)
        
        # set up the frame
        self.initui()
        self.translator = translator()  # 初始化翻译器
        
    def initui(self):
        panel = wx.panel(self)
        vbox = wx.boxsizer(wx.vertical)
        
        # file selection
        file_box = wx.boxsizer(wx.horizontal)
        self.file_path = wx.textctrl(panel)
        file_btn = wx.button(panel, label="选择xlsx文件")
        file_btn.bind(wx.evt_button, self.onselectfile)
        file_box.add(self.file_path, proportion=1, flag=wx.expand|wx.all, border=5)
        file_box.add(file_btn, flag=wx.all, border=5)
        
        # output folder selection
        save_box = wx.boxsizer(wx.horizontal)
        self.save_path = wx.textctrl(panel)
        save_btn = wx.button(panel, label="选择保存路径")
        save_btn.bind(wx.evt_button, self.onselectsavepath)
        save_box.add(self.save_path, proportion=1, flag=wx.expand|wx.all, border=5)
        save_box.add(save_btn, flag=wx.all, border=5)
        
        # convert button
        convert_btn = wx.button(panel, label="转换并翻译")
        convert_btn.bind(wx.evt_button, self.onconvert)
        
        # add to vbox
        vbox.add(file_box, flag=wx.expand|wx.all, border=5)
        vbox.add(save_box, flag=wx.expand|wx.all, border=5)
        vbox.add(convert_btn, flag=wx.align_center|wx.all, border=10)
        
        panel.setsizer(vbox)
        
        self.settitle("excel sheet 转置和翻译器")
        self.setsize((400, 200))
        self.centre()
        
    def onselectfile(self, event):
        with wx.filedialog(self, "选择 excel 文件", wildcard="excel files (*.xlsx)|*.xlsx",
                           style=wx.fd_open | wx.fd_file_must_exist) as filedialog:
            if filedialog.showmodal() == wx.id_cancel:
                return
            path = filedialog.getpath()
            self.file_path.setvalue(path)
    
    def onselectsavepath(self, event):
        with wx.dirdialog(self, "选择保存文件夹",
                          style=wx.dd_default_style) as dirdialog:
            if dirdialog.showmodal() == wx.id_cancel:
                return
            path = dirdialog.getpath()
            self.save_path.setvalue(path)
    
    def onconvert(self, event):
        excel_path = self.file_path.getvalue()
        save_folder = self.save_path.getvalue()
        
        if not excel_path or not save_folder:
            wx.messagebox("请选择文件和保存路径", "错误", wx.icon_error)
            return
        
        try:
            # load the excel file
            xlsx = pd.excelfile(excel_path)
            
            for sheet_name in xlsx.sheet_names:
                # read each sheet
                df = xlsx.parse(sheet_name)
                
                if df.shape[0] < 2:
                    wx.messagebox(f"sheet {sheet_name} 数据不足", "警告", wx.icon_warning)
                    continue
                
                # transpose first column starting from second row (ignoring first row)
                transposed_data = df.iloc[1:, 0].values.t
                
                # translate the english text to chinese
                translated_data = [self.translator.translate(text, src='en', dest='zh-cn').text for text in transposed_data]
                
                # convert translated data to dataframe
                translated_df = pd.dataframe([translated_data])
                
                # save to a new excel file
                output_file = os.path.join(save_folder, f"{sheet_name}_translated.xlsx")
                with pd.excelwriter(output_file) as writer:
                    translated_df.to_excel(writer, index=false, header=false, sheet_name=sheet_name)
                
            wx.messagebox("转换并翻译完成", "成功", wx.icon_information)
        
        except exception as e:
            wx.messagebox(f"出现错误: {e}", "错误", wx.icon_error)


if __name__ == '__main__':
    app = wx.app()
    frame = exceltransposer(none)
    frame.show()
    app.mainloop()

二、 代码分析

程序主要由exceltransposer类构成,该类继承自wx.frame,实现了gui界面的创建和事件处理。

import wx
import pandas as pd
import os
from googletrans import translator

class exceltransposer(wx.frame):
    # ... (代码略) ...

__init__方法: 初始化gui界面和翻译器实例。

initui方法: 创建gui界面元素,包括文件选择按钮、保存路径选择按钮和转换按钮。使用了wx.boxsizer进行布局管理,使界面更整洁美观。

onselectfile方法: 使用wx.filedialog允许用户选择excel文件,并将文件路径显示在文本框中。

onselectsavepath方法: 使用wx.dirdialog允许用户选择保存文件的路径,并将路径显示在文本框中。

onconvert方法: 这是程序的核心部分,负责读取excel文件、进行数据处理和翻译、保存结果文件。

  • 读取excel文件: 使用pandas.excelfile读取excel文件。
  • 循环处理每个sheet: 程序遍历excel文件中的每个sheet。
  • 数据转置: 使用df.iloc[1:, 0].values.t提取第一个列(从第二行开始)的数据并进行转置。
  • 翻译: 使用googletrans.translator将英文文本翻译成中文。
  • 保存结果: 使用pandas.excelwriter将翻译后的数据保存到新的excel文件中。
  • 错误处理: 使用try...except块捕获可能出现的异常,并显示错误信息。

三、 运行程序

确保已安装必要的库:wxpython, pandas, googletrans。可以使用pip安装:

pip install wxpython pandas googletrans==4.0.0-rc1

保存代码为.py文件(例如excel_transposer.py)。

运行程序:python excel_transposer.py

程序运行后会显示一个gui窗口,用户可以按照提示选择excel文件、保存路径,并点击“转换并翻译”按钮进行处理。

运行结果

四、 总结

这个程序提供了一个方便易用的工具,可以批量处理excel文件,将数据转置并进行翻译。程序结构清晰,代码易于理解和维护。通过使用wxpython,程序拥有友好的用户界面,提高了用户体验。 不过,需要注意的是,googletrans的翻译质量和速度可能受网络状况影响。 此外,对于大文件,处理时间可能会较长。 未来可以考虑添加进度条等功能来提升用户体验。

到此这篇关于python实现excel表格转置与翻译工具的文章就介绍到这了,更多相关python excel表格转置与翻译内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com