【发布时间】:2021-12-28 21:22:36
【问题描述】:
底部编辑
我只发布与我的问题相关的部分代码,因为我现在正在使用大约 300 行代码并且正在快速增长。
我的错误:
gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid requests[0].addSheet: A sheet with the name "Elijah Skinner" already exists. Please enter another name.', 'status': 'INVALID_ARGUMENT'}
我的想法:
我认为问题在于 getUser() 没有返回正确的值。我不确定是因为我需要使用 enumerate 还是在获取索引时。
我的代码:
import gspread
import pandas as pd
from gspread import worksheet
from oauth2client.service_account import ServiceAccountCredentials
from tkinter import *
from tkinter import messagebox
import tkinter.font as tkFont
from datetime import datetime
from time import strftime
# authorize the clientsheet
client = gspread.authorize(creds)
# get the instance of the Spreadsheet
sheet = client.open('Punch Card Systems')
# get the first sheet of the Spreadsheet
sheet_instance = sheet.get_worksheet(0)
# get the total number of columns
sheet_instance.col_count
# get the value at the specific cell
sheet_instance.cell(col=3, row=2)
class Employee:
def __init__(self, firstName, lastName, email, timeCard, payRate):
self.firstName = firstName
self.lastName = lastName
self.email = email
self.timeCard = {}
self.payRate = 15
self.clockedIn = False
p1 = Employee("Elijah", "Skinner", "email@gmail.com", timeStamp(), 15.00)
fullName = (p1.firstName + " " + p1.lastName)
def getUser():
for r in range(1, sheet_instance.row_count - 1):
row = sheet_instance.row_values(r)
if row[0] == fullName:
print(row[0])
return row[0]
if fullName == getUser():
sheet_runs = sheet.get_worksheet(fullName)
worksheet.update_cell(1, 1, p1.timeCard)
if fullName != getUser():
sheet.add_worksheet(rows=20, cols=20, title=fullName)
worksheet.update_cell(1, 1, p1.timeCard)
第二个 if 语句成功创建了一个具有正确名称的新工作表,但我的 update_cell 行不工作;不过我更关心的是第一个 if 语句。
我上面粘贴的错误是我在创建工作表后运行程序时得到的。它完全跳过了第一个 if 语句。这告诉我(我认为) getUser() 返回了错误的值。
另一方面,当我使用 print(row[0]) 打印索引值时,无论如何它都会打印出我正在搜索的正确值。如果它返回正确的值,那么这是否意味着我的 if 语句有问题?
编辑:
我只是尝试了这个,看看它是否会返回我需要的正确值:
def getUser():
for r in range(1, sheet_instance.row_count - 1):
row = sheet_instance.row_values(r)
if row[0] == fullName:
print(row[0])
name = row[0]
return name
我收到了这个错误:IndexError: list index out of range
############################
def getUser():
for r in range(1, sheet_instance.row_count - 1):
row = sheet_instance.row_values(r)
if row[0] == fullName:
print(row[0])
return row[0]
if fullName == getUser():
sheet_runs = sheet.get_worksheet(fullName)
sheet_runs.update_cell(1, 1, p1.timeCard)
if fullName != getUser():
sheet.add_worksheet(rows=20, cols=20, title=fullName)
sheet_runs.update_cell(1, 1, p1.timeCard)
我认为我返回了正确的值,但我收到了这个错误:TypeError: list indices must be integers or slices, not str
老实说,这让我更加困惑。它正在打印正确的响应,但没有发送它。是不是因为我打印的时候,它还在那个索引上?
#####################################
def getUser():
for r in range(1, sheet_instance.row_count + 1):
row = sheet_instance.row_values(r)
if row[r] == fullName:
print(row[0])
return True
if getUser():
sheet_runs = sheet.get_worksheet(fullName)
sheet_runs.update_cell(1, 1, p1.timeCard)
else:
sheet.add_worksheet(rows=20, cols=20, title=fullName)
sheet_runs = sheet.get_worksheet(fullName)
sheet_runs.update_cell(1, 1, p1.timeCard)
#############################################
【问题讨论】:
-
请阅读stackoverflow.com/help/minimal-reproducible-example 并尝试创建一段其他人无需修改即可运行的自包含代码以查看问题。甚至不清楚您正在使用哪些库,或者您正在尝试解决什么问题。请尝试提出问题,而不是仅仅通过代码、错误消息和您的思考过程来讨论
-
感谢您的意见。我会相应地更新。
-
@KarlKnechtel 现在应该可以了。我添加了除 tkinter 代码和一些敏感信息之外的所有内容。为混乱道歉。
-
我的问题是为什么 if 语句
if fullName == getUser():不能正常工作,我该如何解决它 -
getUser()将返回fullName或None。如果您所做的只是验证名称,则可以返回 True 或 False。sheet_instance是否应该包含您的工作表名称列表?你究竟是从哪里得到 TypeError 的?
标签: python if-statement tkinter google-sheets gspread