首页 > 解决方案 > 如何在 OpenPyXl 运行时通过变量名更改为特定工作表?

问题描述

所以我想做的是做一个翻译程序。我想读取要翻译的文本文件的文件名,然后在我的工作簿中查找同名的工作表。示例:TranslateMe.txt -> 使用 TranslateMe.txt 查找工作表名称

问题是,我似乎无法使用真实字符串更改工作表的字符串值。

sheet = wb.get_sheet_by_name(wb.sheetnames[0])

它给了我一个错误:当我尝试更改它时,'str' 对象没有属性'cell'。我将发送我的代码

我尝试将值更改为字符串,但它在运行时不起作用......

import openpyxl
import glob
import os
import fileinput
import codecs

currentDir = os.path.dirname(os.path.realpath(__file__)) # Sets path to this place


txtFile = "" # The txt-file that is about to be translated.
# I use this string value to try to change sheet value
wb = openpyxl.load_workbook('Translate.xlsx')

sheet = wb.get_sheet_by_name(wb.sheetnames[0])

# Define amount of rows and columns in current Sheet
rows = sheet.max_row
columns = sheet.max_column

# Languages: 1 = placeholders, 2 = English, 3 = Greek, 4 = Swedish
language = 2

def FindFilesForTranslation():

    filesToTranslateNames = []
    global txtFile
    global sheet

    for file in glob.glob("*.txt"):
        print(file)
        filesToTranslateNames.append(file)
        print(filesToTranslateNames)
        for i in range(len(filesToTranslateNames)):
            print(i)
            txtFile = filesToTranslateNames[i]

            if sheet != filesToTranslateNames[0]: # Underlying problem
                sheet = filesToTranslateNames[i]

            print("TxtFile Name: ", txtFile, "Sheet: ", sheet)
            TranslateFiles()

def TranslateFiles():
    for row in range(1, rows+1):
        for col in range(1, columns+1): 

            # Make sure that col does not exceed the value of language
            if col >= language:
                col = language

            wordToReplace = sheet.cell(row=row, column=col).value # THIS IS WHERE THE ERROR LIES!
            replacerWord = sheet.cell(row=row, column=language).value # same #error over here

所以每当我到达 wordToReplace = sheet.cell 代码行时,我都会收到运行时错误:'str' object has no attribute 'cell'

找到我正在翻译的文件的特定名称很重要,因为工作表不会按特定顺序排列,并且无法通过逻辑 for 循环找到。那么如何在运行时使用 txtFile 字符串更改该变量表的值???

对不起,一个奇怪和半不连贯的帖子。这是我在 Stackoverflow 上的第一篇文章。谢谢你的帮助!

编辑:我刚刚发现我在运行时更改了工作表的字符串值。但是,由于某种原因,“'str' object has no attribute 'cell'”运行时错误

标签: pythonopenpyxl

解决方案


我解决了我自己的问题,如果你像我一样犯了一个愚蠢的错误,这里是答案:

sheet = filesToTranslateNames[i]

应该

sheet.active = filesToTranslateNames[i]

感谢您发布的答案,你们会的!


推荐阅读