Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在OpenPyXl中运行时通过变量名更改为特定的工作表?_Python_Openpyxl - Fatal编程技术网

Python 如何在OpenPyXl中运行时通过变量名更改为特定的工作表?

Python 如何在OpenPyXl中运行时通过变量名更改为特定的工作表?,python,openpyxl,Python,Openpyxl,所以我想做的是做一个翻译程序。我想读取要翻译的文本文件的文件名,然后在工作簿中查找同名的工作表。例子: TranslateMe.txt->使用TranslateMe.txt查找工作表名称 问题是,我似乎无法使用真正的字符串更改sheet的字符串值 sheet=wb.get\u sheet\u by\u name(wb.sheetnames[0]) 它给我一个错误:“str”对象在我尝试更改它时没有属性“cell”。我将发送我的代码 我尝试将值更改为字符串,但在运行时无效 import openp

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

问题是,我似乎无法使用真正的字符串更改sheet的字符串值

sheet=wb.get\u sheet\u by\u 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”对象没有“cell”属性

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

很抱歉,这篇文章很奇怪,语无伦次。这是我在Stackoverflow上的第一篇文章。谢谢你的帮助


编辑:我刚刚发现我正在运行时更改sheet的字符串值。然而,出于某种原因,“str”对象没有属性“cell”运行时错误

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

sheet = filesToTranslateNames[i]
应该是

sheet.active = filesToTranslateNames[i]

谢谢你贴出的答案,你会的

“运行时错误:'str'对象没有属性'cell'”:您在此处覆盖
sheet
sheet=filesToTranslateNames[i]
那么这具体意味着什么?我不是一个经验丰富的程序员,如果我错了,请纠正我:我正在将字符串转换为非字符串?“我正在将字符串转换为非字符串”:您重新定义
sheet=wb。按名称获取工作表(…
sheet=filesToTranslateNames[I]
,以后您需要
wordToReplace=sheet.cell(..
。您不能在同一范围内使用相同的变量名,这里是
工作表
。请阅读并理解。啊哈aaa,现在我明白了!非常感谢您,现在我明白了。我可能只是解决了这个问题。如果我这样做,我会将它发布到更下方,以便为我和所有可能阅读它的人回答这个问题。此外,我将查看该链接再次感谢!请随意发布社区wiki答案,右下角的复选框,以显示您的解决方案。我认为这行不通,因为您无法将类型
str
设置为
sheet.active
。要设置
工作表
标题,您必须使用
sheet.title()