Bootstrap

Python调用API翻译Excel中的英语句子并回填数据

一、问题描述

最近遇到一个把Excel表中两列单元格中的文本读取,然后翻译,再重新回填到单元格中的案例。大约有700多行,1400多个句子,一个个手动复制粘贴要花费不少时间,而且极易出错。这时,我们就可以请出批量Excel的工具Python,利用Python读取两列中非空单元格,调用小牛机器翻译的API,然后把例句翻译后,与原文分两段排列,有效解决了手工复制慢的问题。

样例

二、解决过程

1. 前期准备,申请小牛API

要申请小牛机器翻译的api,拿到它的样例代码,如果你还不太熟练这个过程,可以参考我以前的文章:

用小牛翻译API让ChatGPT给我做个在线翻译网站_chatgpt在线翻译-CSDN博客文章浏览阅读2.2k次。经过测试,上面这段代码有两个问题,一是返回的翻译结果是json格式,不是我们想要的译文,二是打开网页时,这个翻译结果框不显示,显得不是特别好看。这时,我们要请出ChatGPT,设计好我们想要的网页呈现形式,同时还要把我们在小牛翻译上面得到的代码样例,同时在开发过程中,还要在我们的网站上进行测试效果,以期达到我们想到的目标。在上面例子中,我对于生成的译文可以进行译后编辑,也可以再喂给ChatGPT,让它指出我们的语法错误,润色我们的文字,提出进一步修改的意见,这样我们的译文质量就又可以更上一层楼了。_chatgpt在线翻译https://pythonfun.blog.csdn.net/article/details/130538982

2. 分析任务,确保效果

有了api,下一步是分析一下这个Excel表,发现要翻译的是E列和F列,所以我们就可以设置从E列和F列的第三行开始读取,然后翻译,遇到空的单元格就跳过。由于小牛翻译每天给20万字符的翻译,而且QPS可以达到5,也就是一秒可以调用五次,因次是非常适合python调用的。

3. 明晰步骤,编写代码

于是,我们就撰写出下面的代码:

import requests
from openpyxl import load_workbook
from urllib import parse,request
# 翻译函数
apikey="xiaoniu_api_key" #把你的小牛翻译api贴到这里
def translate_txt(sentence):
    url = 'http://api.niutrans.com/NiuTransServer/translation?'
    data = {"from": "en", "to": 'zh', "apikey": apikey, "src_text": sentence}
    data_en = parse.urlencode(data)
    req = url + "&" + data_en
    res = request.urlopen(req)
    res_dict = json.loads(res.read())
    if "tgt_text" in res_dict:
        result = res_dict['tgt_text']
    else:
        result = res
    return result

# 读取Excel文件并进行翻译
def translate_excel(file_path):
    # 加载工作簿
    wb = load_workbook(file_path)
    ws = wb.active  # 获取当前活动的工作表
    
    # 从E3和F3开始读取
    row = 3
    while True:
        e_cell = ws[f'E{row}']
        f_cell = ws[f'F{row}']
        
        # 如果E列和F列的单元格都为空,结束循环
        if not e_cell.value and not f_cell.value:
            break
        
        # 翻译非空的E列和F列
        if e_cell.value:
            e_cell.value = e_cell.value+ "\n"+ translate_txt(e_cell.value)
        if f_cell.value:
            f_cell.value = f_cell.value + "\n" + translate_txt(f_cell.value)
        
        row += 1
    
    # 保存修改后的Excel文件
    wb.save('translated_file.xlsx')
    print("翻译完成,已保存为 'translated_file_外研版 语境版单词表xlsx(1) - 副本.xlsx'")

try:
    translate_excel('外研版 语境版单词表xlsx(1) - 副本.xlsx')
except Exception as exc:
    print(exc)

经过测试,翻译的效果还不错,1400个单元格大约用了不到五分钟就完成了任务,而且全过程无人职守,出去吃个水果,回来工作就已经完成了。

三、学后总结

1. 在日常工作和办公中,如果是批量的、重复性的工作可以想办法用python来解决,节省人才和物力,提高办公的效率。

2. 使用Python时,一定要明确目标和方法,分析问题确定解决步骤,会借助常用的python模块解决现实问题,这样学Python就会感觉非常有成就感。

;