【问题标题】:results to be written in excel column B将结果写入 excel B 列
【发布时间】:2021-01-19 23:20:18
【问题描述】:

下面的代码当前从 Excel 表中为 A 列中的单词位置翻译每个单词,但是它当前在编辑器中给我的结果,但我希望翻译的输出/结果在 B 列中的同一个 Excel 表中。下面的代码给了我一个错误。 请帮助我将结果的代码写在 B 列中的 excel 中。

import xlrd
import goslate

loc = r"C:\path\fruits.xlsx"
gs = goslate.Goslate()

wb = xlrd.open_workbook(loc) 
sheet = wb.sheet_by_index(0)
  
for i in range(sheet.nrows): 
    print(gs.translate(sheet.cell_value(i, 0), 'de'))
    print(sheet.cell_value(i, 1)

我收到以下错误

 return self._cell_values[rowx][colx]
IndexError: list index out of range

请有人帮我将我的输出/结果写在 B 列中的相同 excel 中

【问题讨论】:

    标签: python xlrd goslate


    【解决方案1】:

    错误是因为你没有B 是空的并且包没有从工作表中读取列。

    要将翻译结果写入工作表,您可以执行以下操作:

    我不认为xlrd 可以写入工作表。您将需要使用xlwt 包。你需要安装它pip install xlwt

    import xlrd
    import xlwt # this package is going to write to sheet
    import goslate
    loc = "dummy.xlsx"
    translated = "dummy2.xlsx" # location to where store the modified sheet
    
    gs = goslate.Goslate()
    
    # crate a workbook using xlwt package in order to write to it.
    wbt = xlwt.Workbook() # there is a typo here. this should be wbt
    ws = wbt.add_sheet('A Test Sheet') # change this to your sheet name
    
    rwb = xlrd.open_workbook(loc) 
    sheet = wb.sheet_by_index(0)
      
    for i in range(sheet.nrows): 
        ws.write(i, 0, sheet.cell_value(i, 0)) # this will write the A column value
        ws.write(i, 1, gs.translate(sheet.cell_value(i, 0), 'de')) # this will write the B column value
    
    wbt.save(translated) # this will save the sheet.
    
    

    至于在同一个文件中进行更改,我认为您不应该这样做。该文件已被另一个进程以读取模式打开。更改它可能会导致意外行为。但是,如果您打算这样做,请备份您的文件,并在读取和保存文件时设置 loc。

    【讨论】:

    • 当我运行此代码时,我收到以下错误from _decimal import * AttributeError: module 'numbers' has no attribute 'Number'
    • 我关注这个链接后,当我运行这个代码时收到这个错误NameError: name 'wbt' is not defined
    • 修正了答案中的错字。
    • 无法正常工作?您遇到什么错误?
    【解决方案2】:

    您收到错误是因为 xlrd 地址列从零开始,并且根据文档,xlrd 会忽略没有数据的单元格。

    所以你可以通过这样做来访问A列

    sheet.cell_value(i, 0)
    

    并通过执行写入 B 列

    sheet._cell_types[i][1] = xlrd.XL_CELL_TEXT
    sheet._cell_values[i][1] = source
    

    但是xlrd 仅用于阅读,因此您必须使用xlwt 来保存任何更改。

    保存更改会带来另一个问题,您的源文件是“.xlsx”扩展名,而xlrd 确实读取此格式,xlwt 仅写入旧的“.xls”格式。

    要使用一个库读取和写入“.xlsx”格式,您可以使用openpyxl,使用此库您的代码将如下所示:

    import openpyxl
    import goslate
    
    loc = r"C:\path\fruits.xlsx"
    gs = goslate.Goslate()
    
    wb = openpyxl.load_workbook(loc)
    sheet = wb.active
    
    for i in range(2, sheet.max_row + 1):
        original = sheet.cell(row=i, column=1).value
        translated = gs.translate(original, 'de')
        sheet.cell(row=i, column=2).value = translated
        
    wb.save(loc)
    

    【讨论】:

    • 这段代码不起作用给我下面的错误Traceback (most recent call last): File "c:\Users\userid\translation.py", line 14, in <module> translated = gs.translate(source, 'de') NameError: name 'source' is not defined
    • 在那一行source 应该是original,我修复了答案中的代码。
    猜你喜欢
    • 2016-08-20
    • 2016-01-20
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多