要翻译的excel大致长这样:

其实有第一篇的基础,我以为这次只要随便改改就行。没想到最大的问题出在找不到合适的用于Translate的python包。最著名的googletrans 包因为国内众所周知的原因不能使用。因此找了很久替代品,最后找到了pygtrans这个包。 它可以支持在接口中传入proxy的值,也就是科学上网所使用的端口。 别的部分就很简单了,改一改就可以成功运行了。

from openpyxl import *
from openpyxl.drawing.image import Image
from openpyxl.cell import MergedCell
from openpyxl.drawing.spreadsheet_drawing import OneCellAnchor, AnchorMarker
from openpyxl.utils.units import pixels_to_EMU, cm_to_EMU
from openpyxl.drawing.xdr import XDRPoint2D, XDRPositiveSize2Dfrom io import BytesIO
import os
from tqdm import tqdm
import traceback
from pygtrans import Translate
class ExcelOp(object):def __init__(self, file, sheet_name="Sheet1"):self.file = fileself.wb = load_workbook(self.file)self.ws = self.wb[sheet_name]# self.max_rows, self.max_cols = self.ws.max_row, self.ws.max_column# 获取某个单元格的值def get_cell_value(self, row, column):cell = self._parser_merged_cell(row, column)cell_value = cell.valuereturn cell_value# 获取某列的所有值def get_col_value(self, column) -> list:rows = self.ws.max_rowcolumn_data = []for i in range(1, rows + 1):cell_value = self.get_cell_value(row=i, column=column)column_data.append(cell_value)return column_data# 获取某行所有值def get_row_value(self, row):columns = self.ws.max_columnrow_data = []for i in range(1, columns + 1):cell_value = self.get_cell_value(row=row, column=i)row_data.append(cell_value)return row_data# 设置某个单元格的值def set_cell_value(self, row, colunm, cellvalue):cell = self._parser_merged_cell(row, colunm)try:cell.value = cellvalueexcept:cell.value = "ERROR:write fail"# 在单元格后添加文本内容def append_cell_value(self, row, colunm, cellvalue):cell = self._parser_merged_cell(row, colunm)assert(type(cell.value) == str)try:cell.value += cellvalueexcept:cell.value += "ERROR:append fail"# 在某个单元格上添加一张图def set_image(self, fp: BytesIO, row: int, column: int, img_pixel_height=None, img_pixel_width=None):cell = self._parser_merged_cell(row, column)image_data = Image(fp)w = image_data.width if img_pixel_width is None else img_pixel_widthh = image_data.height if img_pixel_height is None else img_pixel_heightsize = XDRPositiveSize2D(pixels_to_EMU(w), pixels_to_EMU(h))# https://stackoverflow.com/questions/55309671/more-precise-image-placement-possible-with-openpyxl-pixel-coordinates-instead# AnchorMarker 它的row和col 又从0开始数了 好烦marker = AnchorMarker(col=cell.column-1, row=cell.row-1)image_data.anchor = OneCellAnchor(_from=marker, ext=size)# image_data.anchor = "A1"self.ws.add_image(image_data)def _parser_merged_cell(self, row, col):"""检查是否为合并单元格并获取对应行列单元格的值。如果是合并单元格,则取合并区域左上角单元格的值作为当前单元格的值,否则直接返回该单元格的值:param sheet: 当前工作表对象:param row: 需要获取的单元格所在行:param col: 需要获取的单元格所在列:return: """cell = self.ws.cell(row=row, column=col)if isinstance(cell, MergedCell):  # 判断该单元格是否为合并单元格for merged_range in self.ws.merged_cells.ranges:  # 循环查找该单元格所属的合并区域if cell.coordinate in merged_range:# 获取合并区域左上角的单元格作为该单元格的值返回cell = self.ws.cell(row=merged_range.min_row, column=merged_range.min_col)breakreturn cellif __name__ == "__main__":dirs = os.listdir()     files = []for file in dirs:if file.split('.')[-1]=="xlsx" and "中文" not in file: # 排除有 _中文  后缀的文件files.append(file ) translator = Translate(source='auto',target='zh-CN',fmt='text',proxies={'http': 'http://localhost:10080', 'https': 'http://localhost:10080'})files = files[0:]for file in files:excel = ExcelOp(file=file,sheet_name='题库')columns = [2,8,9,10,11]if '3' in file or'4' in file:columns = [2,9,10,11,12]for i in columns:english = excel.get_col_value(i)  # excel行和列都是从1开始数  7对应Gfor idx in range(len(english)):if english[idx]==None:english[idx] = ''english[idx] = english[idx].strip()chinese = translator.translate(english)chinese = [txt.translatedText for txt in chinese]try:    for row, txt in (enumerate(chinese)):row = row+1  # python从0开始数  excel从1开始if(english[row-1]!=txt):excel.append_cell_value(row,i,txt)# excel.ws.row_dimensions[row].height = 250  # 设置单元格高except:print("Error in {}, colum {}".format(file,i))excel.wb.save(file[0:-5]+'_中文.xlsx') #输出文件名上加上 _中文 后缀

用python对excel进行批量处理(2):将表格中的英文翻译成中文相关推荐

  1. python操作excel:批量为多个sheet页生成超链接

    python操作excel:批量为多个sheet页生成超链接 目录 需求 解决办法 举一反三 需求 excel文件内存在多个sheet页,想要将总表中的信息进行关联和对应的sheet页进行关联,可以通 ...

  2. python批量翻译excel表格中的英文

    python批量翻译excel表格中的英文 需求背景 主要设计 分析 具体实现 表格操作 请求百度翻译api 多线程 控制台显示进度 完整源码 需求背景 女朋友的论文需要爬取YouTube视频热评,但 ...

  3. Python 根据Excel数据源批量自动填写Excel模板

    Python 根据Excel数据源批量填写Excel模板 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import xlwt from xlutils. ...

  4. 【收藏】Python利用Excel+模板批量生成word文件

    Python利用Excel+模板批量生成word文件 最近帮朋友批量生成小区业主物业费未缴的律师函.朋友那有物业那边的表格数据,包括楼栋-房间号.业主姓名.欠费日期.欠款金额等信息.目的是需要将这些表 ...

  5. 如何在Excel/WPS表格中使用百度翻译公式?

    之前小编讲了如何在表格中使用谷歌翻译公式,有的小伙伴便问有没有百度翻译公式呢?今天,它来了! 使用百度翻译公式需要五个参数,即要翻译的文本.翻译语言.目标语言.APP ID.百度翻译平台秘钥.前三个参 ...

  6. 如何在Excel/WPS表格中使用DeepL翻译公式?

    号称全世界最精准的机器翻译DeepL自2017年首次推出后,慢慢在翻译领域超过了各大巨头.DeepL旨在与其他翻译工具同样速度的情况下,准确度更高.那么如何在Excel/WPS表格中使用DeepL翻译 ...

  7. python将dict中的unicode打印成中文

    python将dict中的unicode打印成中文 import json a = {u'content': {u'address_detail': {u'province': u'\u5409\u6 ...

  8. python翻译成中文_Python调用有道智云文本翻译API接口实现“智能”伪原创

    >> 开始伪原创中..\")"],[20,"\n","24:\"OL7j\"|36:131"],[20,&q ...

  9. python将英文翻译为中文_Python使用百度翻译开发平台实现英文翻译为中文功能示例...

    本文实例讲述了Python使用百度翻译开发平台实现英文翻译为中文功能.分享给大家供大家参考,具体如下: #coding=utf8 import random import requests impor ...

最新文章

  1. (原)War3 脚本分析5-基础脚本资源
  2. 竟有内鬼!北理工硕士生「复制粘贴」论文,旷视研究员最新声明
  3. Java堆栈功能_【ThinkingInJava】35、用java实现堆栈功能
  4. boolean searching, it is so important for searching your papers
  5. QT 调用 DLL 的三种方法
  6. Silverlight动画制作之From/To/By基本动画
  7. Android的十六进制颜色值
  8. greenplum 替代mysql_转:MySQL到Greenplum迁移分析
  9. hikvision v2.3控件网页demo_网页禁止复制粘贴怎么解决?教你五招轻松搞定
  10. linux malloc free 内存碎片_内存申请malloc/new与内存释放free/delete的区别
  11. flacs 安装教程_文章详细信息
  12. 专业科目笔试计算机,2021年度中国证监会招考职位专业科目笔试考试大纲(计算机类)...
  13. 联想M7216NWA墨粉清零:
  14. 仓库货位 mysql_Max(TM)财务进销存管理系统
  15. java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】
  16. 计算机网络中的节点有转接节点和传输节点,计算机网络技术复习材料带答案全套...
  17. ESP8266 Arduino开发之路(2)— 连接到无线WiFi路由器
  18. 房贷利息怎么算, 千万别被砖家叫兽误导
  19. hyper-v虚拟机常用命令
  20. 现在不是去想缺少什么的时候,该想一想凭现有的东西你能做什么。

热门文章

  1. Android KTX与Kotlin Android Extensions
  2. 自学成才,PHP从入门到精通学习路线规划
  3. maven更新快照不起作用的解决方法
  4. 张驰课堂:你还在把六西格玛当工具在用吗
  5. 销售人员如何打好专业基础、成为一名合格的销售?
  6. openstack_Stein版安装文档
  7. android 钢琴识别音阶对错_Sans钢琴音阶
  8. Tears - 一首钢琴曲
  9. Newsfan FTP1软件保留区文件列表
  10. 过去时代的诗与人 : 李太白