Python实战:Excel中文转拼音工具开发教程

在日常办公中,我们经常需要处理Excel文件,有时候需要将中文转换为拼音缩写以方便检索和使用。今天我将分享一个使用Python开发的小工具,它可以自动将Excel文件中指定列的中文转换为拼音缩写。

C:\pythoncode\new\ConvertExcelcontentToPinyin.py

开发环境准备

首先,我们需要安装以下Python库:

bash 复制代码
pip install wxPython    # 用于创建图形界面
pip install openpyxl    # 用于处理Excel文件
pip install pypinyin    # 用于中文转拼音

核心功能设计

我们的工具主要实现以下功能:

  1. 图形界面选择Excel文件
  2. 自动定位"项目名称"和"部门"列
  3. 中文转换为拼音大写缩写
  4. 生成新的Excel文件
  5. 显示处理结果

代码实现

全部代码

python 复制代码
import wx
import openpyxl
from pypinyin import pinyin, Style
import os

class MainFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Excel中文转拼音缩写工具', size=(500, 300))
        self.init_ui()
        
    def init_ui(self):
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        # 创建文件选择按钮
        select_btn = wx.Button(panel, label='选择Excel文件')
        select_btn.Bind(wx.EVT_BUTTON, self.on_select)
        vbox.Add(select_btn, 0, wx.ALL | wx.CENTER, 20)
        
        # 创建状态显示文本框
        self.status_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        vbox.Add(self.status_text, 1, wx.ALL | wx.EXPAND, 20)
        
        panel.SetSizer(vbox)
        self.Centre()
        
    def on_select(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
            
            pathname = fileDialog.GetPath()
            try:
                self.process_excel(pathname)
            except Exception as e:
                wx.MessageBox(f'处理文件时发生错误:{str(e)}', '错误',
                            wx.OK | wx.ICON_ERROR)

    def get_pinyin_abbr(self, chinese_str):
        """获取中文的拼音缩写"""
        if not chinese_str or not isinstance(chinese_str, str):
            return chinese_str
            
        # 获取每个字的拼音首字母
        abbr = ''
        for p in pinyin(chinese_str, style=Style.FIRST_LETTER):
            abbr += p[0].upper()
        return abbr
    
    def process_excel(self, filepath):
        """处理Excel文件"""
        self.status_text.SetValue("开始处理文件...\n")
        
        # 加载工作簿
        wb = openpyxl.load_workbook(filepath)
        ws = wb.active
        
        # 查找目标列的索引
        project_col = None
        dept_col = None
        
        for col in range(1, ws.max_column + 1):
            cell_value = ws.cell(row=2, column=col).value  # 假设第2行是标题行
            if cell_value == "项目名称":
                project_col = col
            elif cell_value == "部门":
                dept_col = col
        
        if not project_col or not dept_col:
            raise ValueError("未找到'项目名称'或'部门'列")
        
        # 转换内容
        changes = []
        for row in range(3, ws.max_row + 1):  # 从第3行开始处理
            # 处理项目名称
            project_cell = ws.cell(row=row, column=project_col)
            if project_cell.value:
                original_project = project_cell.value
                project_cell.value = self.get_pinyin_abbr(original_project)
                changes.append(f"行 {row}: 项目名称 '{original_project}' -> '{project_cell.value}'")
            
            # 处理部门
            dept_cell = ws.cell(row=row, column=dept_col)
            if dept_cell.value:
                original_dept = dept_cell.value
                dept_cell.value = self.get_pinyin_abbr(original_dept)
                changes.append(f"行 {row}: 部门 '{original_dept}' -> '{dept_cell.value}'")
        
        # 生成新文件名
        file_dir = os.path.dirname(filepath)
        file_name = os.path.basename(filepath)
        new_file_name = f"pinyin_{file_name}"
        new_filepath = os.path.join(file_dir, new_file_name)
        
        # 保存新文件
        wb.save(new_filepath)
        
        # 更新状态
        status_msg = "\n".join(changes)
        self.status_text.AppendText(f"\n转换完成!更改详情:\n{status_msg}\n\n新文件已保存为:{new_filepath}")

def main():
    app = wx.App()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

1. 创建图形界面

首先,我们使用wxPython创建一个简单的图形界面:

python 复制代码
class MainFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='Excel中文转拼音缩写工具', size=(500, 300))
        self.init_ui()
        
    def init_ui(self):
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        # 创建文件选择按钮
        select_btn = wx.Button(panel, label='选择Excel文件')
        select_btn.Bind(wx.EVT_BUTTON, self.on_select)
        vbox.Add(select_btn, 0, wx.ALL | wx.CENTER, 20)
        
        # 创建状态显示文本框
        self.status_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        vbox.Add(self.status_text, 1, wx.ALL | wx.EXPAND, 20)
        
        panel.SetSizer(vbox)
        self.Centre()

2. 实现文件选择功能

添加文件选择对话框和错误处理:

python 复制代码
def on_select(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
        
        pathname = fileDialog.GetPath()
        try:
            self.process_excel(pathname)
        except Exception as e:
            wx.MessageBox(f'处理文件时发生错误:{str(e)}', '错误',
                        wx.OK | wx.ICON_ERROR)

3. 中文转拼音功能

使用pypinyin库实现中文转拼音缩写:

python 复制代码
def get_pinyin_abbr(self, chinese_str):
    """获取中文的拼音缩写"""
    if not chinese_str or not isinstance(chinese_str, str):
        return chinese_str
        
    # 获取每个字的拼音首字母
    abbr = ''
    for p in pinyin(chinese_str, style=Style.FIRST_LETTER):
        abbr += p[0].upper()
    return abbr

4. Excel处理核心功能

实现Excel文件的读取、处理和保存:

python 复制代码
def process_excel(self, filepath):
    """处理Excel文件"""
    self.status_text.SetValue("开始处理文件...\n")
    
    # 加载工作簿
    wb = openpyxl.load_workbook(filepath)
    ws = wb.active
    
    # 查找目标列的索引
    project_col = None
    dept_col = None
    
    for col in range(1, ws.max_column + 1):
        cell_value = ws.cell(row=2, column=col).value
        if cell_value == "项目名称":
            project_col = col
        elif cell_value == "部门":
            dept_col = col
    
    # 转换内容并保存
    # ... (详细代码见完整实现)

技术要点解析

  1. wxPython使用技巧

    • 使用BoxSizer进行界面布局
    • 添加文件选择对话框
    • 实现事件绑定
  2. Excel处理技巧

    • 使用openpyxl读写Excel文件
    • 动态查找目标列
    • 保持原始格式不变
  3. 中文转拼音处理

    • 使用pypinyin库处理中文
    • 提取拼音首字母
    • 处理异常情况

使用效果

  1. 运行程序后显示简洁的操作界面
  2. 点击按钮选择Excel文件
  3. 自动处理并生成新文件
  4. 界面实时显示处理进度和结果

实际应用案例

比如有以下数据:

  • 项目名称:智能消防工程
  • 部门:消防支队

转换后变为:

  • 项目名称:ZNXFGC
  • 部门:XFZD

注意事项

  1. 确保Excel文件格式正确
  2. 表格第2行必须是标题行
  3. 从第3行开始处理数据
  4. 原文件不会被修改

未来优化方向

  1. 添加自定义列选择功能
  2. 支持更多Excel格式
  3. 添加批量处理功能
  4. 优化转换规则

运行结果

相关推荐
Zhansiqi36 分钟前
day42部分题目
python
小王不爱笑13242 分钟前
IO 模型
开发语言·python
kishu_iOS&AI1 小时前
Conda 简要说明与常用指令
python·安全·conda
小陈工1 小时前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
知我Deja_Vu1 小时前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
njidf1 小时前
用Python制作一个文字冒险游戏
jvm·数据库·python
呆呆小孩1 小时前
Anaconda 被误删抢救手册:从绝望到重生
python·conda
liliangcsdn1 小时前
LLM复杂数值的提取计算场景示例
人工智能·python
人工智能AI酱2 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
WangLanguager2 小时前
逻辑回归(Logistic Regression)的详细介绍及Python代码示例
python·算法·逻辑回归