我有一大堆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
谢谢你的帮助
根据您的错误,我们可以看到问题出在翻译上,而不是xlwt或xlrd。问题是
translate
函数需要的是字符串,而不是数字。如果单元格值是数字,sheet.cell_value(...)
将返回一个浮点。我的猜测是,您只对包含文本的单元格测试了translate
函数您可以执行以下操作之一:
你需要尝试这两种方法,看看哪种方法最适合你
您可能希望使用其他名称更改输出文件。在粘贴的代码中,加载原始文件“test.xlsx”,并将翻译后的文件也写入“test.xlsx”。我不知道这是否有效,但如果有效,您将丢失原始文件
顺便说一下,正如我测试过的那样,xlwt不支持
.xlsx
格式(see an example here)。您要么必须将其写入.xls
文件,要么必须查找支持.xlsx
的其他模块相关问题 更多 >
编程相关推荐