From 9d1c95bcd86e4cfacd866453b095ad4093eb658c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AF=9B=E4=B8=81?= <709870715@qq.com> Date: Thu, 14 Mar 2024 13:18:57 +0800 Subject: [PATCH] blakSpaceForExcel --- README.md | 4 +++ blakSpaceForExcel.py | 83 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 blakSpaceForExcel.py diff --git a/README.md b/README.md index 4b288b6..92d8031 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ # blakSpaceForExcel +做片尾时,在Excel里排版结束以后会有很多二字人名的长度不同于三字人名。 +这个时候对二字人名条买相机全角空格可以很好地调整这个情况。 +再打开Excel的时候启动脚本,可以一键清除表里的隐藏制表符,并给人名加空格。 +避免了繁琐的手动步骤。 \ No newline at end of file diff --git a/blakSpaceForExcel.py b/blakSpaceForExcel.py new file mode 100644 index 0000000..45438c9 --- /dev/null +++ b/blakSpaceForExcel.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# coding=utf-8 +import re +import openpyxl +from tkinter import filedialog, messagebox, Label, Button, Frame, Tk + +class AppWindow(Frame): + def __init__(self, master=None): + super().__init__(master) + self.master = master + self.title = '霹雳无敌二字人名全角空格横通裂空融合升级工具' # 更改窗口标题 + self.initUI() + + def initUI(self): + self.master.title(self.title) + self.master.geometry('400x150') # 设置窗口大小 + + # 文件选择标签和按钮 + self.file_label = Label(self.master, text='选择的文件: 无') + self.file_label.pack() + + self.file_button = Button(self.master, text='选择Excel文件', command=self.openFileNameDialog) + self.file_button.pack() + + # 开始处理按钮 + self.start_button = Button(self.master, text='开始处理', command=self.processWorkbook) + self.start_button.pack() + + def openFileNameDialog(self): + self.fileName = filedialog.askopenfilename(title="选择Excel文件", filetypes=(("Excel files", "*.xlsx"), ("all files", "*.*"))) + if self.fileName: + self.file_label.config(text=f'选择的文件: {self.fileName}') + + def processWorkbook(self): + print("开始处理工作簿...") # 日志 + if self.fileName: + print(f"文件名: {self.fileName}") # 日志 + result, changes = add_full_width_space_to_all_sheets(self.fileName) + self.file_label.config(text='选择的文件: 无') + result_message = result + '\n\n' + '\n'.join(changes) if changes else result + messagebox.showinfo('处理结果', result_message) + else: + print("没有文件被选择") # 日志 + +def add_full_width_space_to_all_sheets(filename): + print(f"处理文件: {filename}") # 打印文件名 + try: + # 加载Excel工作簿 + workbook = openpyxl.load_workbook(filename) + modified = False # 添加一个标记来检查是否有单元格被修改 + changes = [] # 用于记录修改详情 + + for sheet_name in workbook.sheetnames: + sheet = workbook[sheet_name] + for row in sheet.iter_rows(min_row=1, max_col=sheet.max_column, max_row=sheet.max_row, values_only=False): + for cell in row: + if cell.value is not None: + # 删除所有空格、全角空格和制表符 + original_value = cell.value + cleaned_value = str(cell.value).replace(' ', '').replace(' ', '').replace('\t', '') + + # 如果清理后的值是两个字符,添加全角空格 + if len(cleaned_value) == 2: + cell.value = cleaned_value[0] + ' ' + cleaned_value[1] # 在两个字之间添加全角空格 + else: + cell.value = cleaned_value + + modified = True + changes.append(f"{sheet_name}!{cell.coordinate}: '{original_value}' -> '{cell.value}'") + + if modified: + workbook.save(filename) # 只有在至少有一个单元格被修改时才保存工作簿 + return '文件已修改并保存。', changes + else: + return '没有找到需要修改的单元格。', [] + except Exception as e: + print(f"处理过程中发生错误: {e}") # 打印错误信息 + return f"处理过程中发生错误: {e}", [] + +if __name__ == '__main__': + root = Tk() + app = AppWindow(root) + app.mainloop()