如何使用python将excel文件转换为另一种语言,同时保留格式

2024-10-02 02:31:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一大堆excel文件需要翻译成英语,所以我尝试创建一个python程序来完成,因为我发现Translate My Sheet有局限性。我设法用xlrd和googletrans读取和翻译每个单元格,但我遇到了一个问题,无法用xlwt写回原始文件

我设法想出的代码

import xlrd
import xlwt
from xlwt import Workbook
from googletrans import Translator

translator =Translator()

location = (r'test.xlsx')

#Writing to file
wb_w = Workbook()
sheet1 = wb_w.add_sheet('sheet 1')
#Reading file
wb_r = xlrd.open_workbook(location)
sheet = wb_r.sheet_by_index(0)
sheet.cell_value(0,0)

#Going through each cell to translate and rewriting
for column in range(sheet.nrows):
    for row in range(sheet.ncols):
        print(sheet.cell_value(column, row))
        sheet1.write(column, row, translator.translate(sheet.cell_value(column, row), dest='en').text)

wb_w.save(r'test.xlsx')

这就是我得到的错误

Traceback (most recent call last):
  File "C:/Users/bobi_/PycharmProjects/Translator/Translator.py", line 22, in <module>
    sheet1.write(column, row, translator.translate(sheet.cell_value(column, row), dest='en').text)
  File "C:\Users\bobi_\PycharmProjects\Translator\venv\lib\site-packages\googletrans\client.py", line 182, in translate
    data = self._translate(text, dest, src, kwargs)
  File "C:\Users\bobi_\PycharmProjects\Translator\venv\lib\site-packages\googletrans\client.py", line 78, in _translate
    token = self.token_acquirer.do(text)
  File "C:\Users\bobi_\PycharmProjects\Translator\venv\lib\site-packages\googletrans\gtoken.py", line 195, in do
    tk = self.acquire(text)
  File "C:\Users\bobi_\PycharmProjects\Translator\venv\lib\site-packages\googletrans\gtoken.py", line 140, in acquire
    for i in text:
TypeError: 'float' object is not iterable

谢谢你的帮助


Tags: textinpycellcolumnuserstranslatefile
1条回答
网友
1楼 · 发布于 2024-10-02 02:31:13

根据您的错误,我们可以看到问题出在翻译上,而不是xlwt或xlrd。问题是translate函数需要的是字符串,而不是数字。如果单元格值是数字,sheet.cell_value(...)将返回一个浮点。我的猜测是,您只对包含文本的单元格测试了translate函数

您可以执行以下操作之一:

  1. 检查值的类型。仅当类型为字符串时进行转换
for column in range(sheet.nrows):
    for row in range(sheet.ncols):
        value = sh.cell_value(column, row)
        if type(value) == str:
            value = translate.translate(value, dest='en').text
        sheet1.write(column, row, value)
  1. 或者,您可以先将值转换为字符串,然后对其进行转换
value = str(sh.cell_value(column, row))
translated = translate.translate(value, dest='en').text
sheet1.write(column, row, translated)

你需要尝试这两种方法,看看哪种方法最适合你


您可能希望使用其他名称更改输出文件。在粘贴的代码中,加载原始文件“test.xlsx”,并将翻译后的文件也写入“test.xlsx”。我不知道这是否有效,但如果有效,您将丢失原始文件

顺便说一下,正如我测试过的那样,xlwt不支持.xlsx格式(see an example here)。您要么必须将其写入.xls文件,要么必须查找支持.xlsx的其他模块

相关问题 更多 >

    热门问题