一键翻译自动填表工具v1.1
2021年3月22日更新内容:
增加了容错以后的保存处理,避免了过长时间的白费等待
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : 黑羽青衣 # @File : TranslateTool.py from openpyxl.reader.excel import load_workbook import translators as ts import re import time from zhconv import convert import os import time class Translate(): def __init__(self, excel_path:str, sFileName, no_list, language): '''打开一个excel''' self.excel_path = excel_path self.sFileName = sFileName self.no_list = no_list self.language = language #print(excel_path) if not os.path.exists(excel_path): print("路径错误,请检查当前路径") os.system('pause') def Get_FileName(self, excel_path): print("开始检查文件") sFileName = [] filename = os.listdir(excel_path) try: for Name in filename: if os.path.exists(excel_path + r"\\" + Name): suffix = Name.split(".")[1] test = Name.split(".", 2) if len(test) == 2: if suffix == "xlsx" or suffix == "xlsm" or suffix == "xltx" or suffix == "xltm": name = Name.split(".")[0] if "~$" not in name: sFileName.append(Name) else: print("发现冲突的文件,请检查文件名:{}".format(Name.split(".")[0])) continue print("检查完毕!") return sFileName except Exception as e: print(e) pass def get_needchecksheetname(self, excel_path, sFileName): needchecksheetname = [] if sFileName == None: return wb = load_workbook(excel_path + r"\\" + sFileName) if wb != None: sheetnames = wb.get_sheet_names() for sheet in sheetnames: if sheet not in no_list: #print("现在检查的sheetname:{}".format(sheet), flush=True) needchecksheetname.append(sheet) return needchecksheetname def run(self): sFileName = self.Get_FileName(excel_path) #print("==============================开始查表==============================") #help(ts.deepl) self.check_Language() os.system('pause') def check_Language(self): print("一键翻译语言工具") text = "" new_text = "" try: wb = load_workbook(excel_path + r"\\语言总表_Language.xlsx") sheetnames = self.get_needchecksheetname(excel_path, "语言总表_Language.xlsx") for a in sheetnames: self.ws = wb.get_sheet_by_name(a) for y in range(2, self.ws.max_column + 1): if self.ws.cell(1, y).value in language: lan = self.ws.cell(1, y).value for i in range(6, self.ws.max_row + 1): if self.ws.cell(i, y).value == None and self.ws.cell(i, 1).value != None and self.ws.cell(i,2).value != None: print("打印Sheet:{} 语言:{} 第{}行 第{}列 为空,开始翻译!".format(a, lan, i, y)) text = self.ws.cell(i, 2).value new_text = self.ws.cell(i, 2).value if text != None: re_text = re.findall(r'[\u4E00-\u9FA5]+',text) if re_text: for x in re_text: #print(a) time.sleep(2) data = self.translate(x, lan) if data != None: new_text = re.sub(x, data, new_text, count=1) print("翻译前的语言:" + text + " 翻译后的语言:" + new_text) self.ws.cell(row=i, column=y, value=new_text) else: print("发现有不是中文的情况!sheet:{} 第{}行 第{}列 内容{}".format(a, i, 2, text)) print("检查完毕,没有需要翻译的!") except Exception as e: print(e) pass finally: print("检查完毕,没有需要翻译的!") if wb.save(excel_path + r"\\语言总表_Language.xlsx"): print("保存完毕") def translate(self, text, lan): if lan == "繁體": time.sleep(1) sentence = ts.google(text, to_language='zh-TW', if_use_cn_host=True, sleep_seconds=1.0) if sentence: return sentence if lan == "繁体": time.sleep(1) sentence = ts.google(text, to_language='zh-TW', if_use_cn_host=True, sleep_seconds=1.0) if sentence: return sentence if lan == "英文": time.sleep(1) sentence = ts.google(text, if_use_cn_host=True, sleep_seconds=1.0) if sentence: return sentence if lan == "泰文": time.sleep(1) sentence = ts.google(text, to_language='th', if_use_cn_host=True, sleep_seconds=1.0) if sentence: return sentence if lan == "印尼文": time.sleep(1) sentence = ts.google(text, to_language='id', if_use_cn_host=True, sleep_seconds=1.0) if sentence: return sentence if lan == "越南语": time.sleep(1) sentence = ts.google(text, to_language='vi', if_use_cn_host=True, sleep_seconds=1.0) if sentence: return sentence if __name__ == '__main__': excel_path = os.path.abspath("数据表") sFileName = "" no_list = [ "语言总表附录", "LanguageType", "逐行编辑公告专用", "游戏专业术语表", ] language = [ "简体中文", "繁體", "繁体", "英文", "泰文", "印尼文", "越南语", ] s = Translate(excel_path, sFileName, no_list, language) s.run()