python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel表格转置与翻译

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

作者:winfredzhang

本文主要介绍如何使用Python编写一个GUI程序,能够读取Excel文件,将第一个列的数据转置,并将英文内容翻译成中文,有需要的小伙伴可以参考一下

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

C:\pythoncode\new\rotateexcel.py

一、 功能概述

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

全部代码

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文件、进行数据处理和翻译、保存结果文件。

三、 运行程序

确保已安装必要的库: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表格转置与翻译内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文