在日常办公中,我们经常需要处理excel文件,有时候需要将中文转换为拼音缩写以方便检索和使用。今天我将分享一个使用python开发的小工具,它可以自动将excel文件中指定列的中文转换为拼音缩写。
开发环境准备
首先,我们需要安装以下python库:
pip install wxpython # 用于创建图形界面 pip install openpyxl # 用于处理excel文件 pip install pypinyin # 用于中文转拼音
核心功能设计
我们的工具主要实现以下功能:
- 图形界面选择excel文件
- 自动定位"项目名称"和"部门"列
- 中文转换为拼音大写缩写
- 生成新的excel文件
- 显示处理结果
全部代码
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创建一个简单的图形界面:
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. 实现文件选择功能
添加文件选择对话框和错误处理:
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库实现中文转拼音缩写:
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文件的读取、处理和保存:
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库处理中文
- 提取拼音首字母
- 处理异常情况
使用效果
运行程序后显示简洁的操作界面
点击按钮选择excel文件
自动处理并生成新文件
界面实时显示处理进度和结果
实际应用案例
比如有以下数据:
- 项目名称:智能消防工程
- 部门:消防支队
转换后变为:
- 项目名称:znxfgc
- 部门:xfzd
注意事项
确保excel文件格式正确
表格第2行必须是标题行
从第3行开始处理数据
原文件不会被修改
未来优化方向
添加自定义列选择功能
支持更多excel格式
添加批量处理功能
优化转换规则
运行结果
到此这篇关于使用python实现excel中文转拼音的文章就介绍到这了,更多相关python excel中文转拼音内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论