Python:无法将DataFrame追加至Google Sheets指定列及报错处理
问题解决与代码修正
报错原因
你调用gs.values_append()时参数传递冲突:Spreadsheet.values_append()的第一个参数就是range_name(格式应为工作表名!范围),但你既传了位置参数'sheet1',又通过关键字传了range='S:AE',导致同一个参数被多次赋值,触发TypeError。
需求实现方案
要同时实现A列追加日期、CSV数据写入S:AE列的需求,需调整数据结构并修正API调用方式:
修正后的代码
import pandas as pd import gspread from google.oauth2.service_account import Credentials from datetime import date def csv_to_sheets(): tokenPath = 'path for service account file.json' scopes = [ 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive' ] credentials = Credentials.from_service_account_file(tokenPath, scopes=scopes) gc = gspread.authorize(credentials) gs = gc.open('csv_to_gSheet') workSheet1 = gs.worksheet('sheet1') # 读取CSV数据 my_csv = pd.read_csv("my csv file path") # 获取当前日期(可按需修改格式,比如"%Y/%m/%d") current_date = date.today().strftime("%Y-%m-%d") # 构造目标行数据:A列=日期,B-R列留空,S-AE列=CSV数据 # S是第19列,B到R共17列,所以用17个空值填充 empty_cols = [''] * 17 formatted_rows = [] for _, row in my_csv.iterrows(): csv_row = row.tolist() # 拼接完整行:日期 + 空列 + CSV数据 full_row = [current_date] + empty_cols + csv_row formatted_rows.append(full_row) # 追加数据到A:AE范围,确保各列数据对应正确位置 workSheet1.values_append( 'A:AE', {'valueInputOption': 'RAW'}, {'values': formatted_rows} ) csv_to_sheets()
关键说明
- API调用修正:改用工作表对象
workSheet1调用values_append(),范围参数直接指定为A:AE,避免参数冲突。 - 数据结构调整:通过在每行CSV数据前添加日期、中间填充空值,让CSV数据自动对应到S-AE列的位置(A列是日期,B-R列留空,S列开始为CSV内容)。
- 日期自定义:如果需要使用CSV自带的日期而非当前日期,只需将
current_date替换为CSV中对应的日期列值即可。 - 列数匹配:若CSV列数与S-AE的列数(共13列:S=19到AE=31)不匹配,可调整
empty_cols的长度,或对CSV数据做截断/补空处理,确保每行总长度为31(对应A到AE列)。
内容的提问来源于stack exchange,提问作者Kartikeya Kawadkar
相关产品推荐
相关产品推荐

