【问题标题】:Google Sheet API batch update issue iOSGoogle Sheet API 批量更新问题 iOS
【发布时间】:2016-08-11 16:10:18
【问题描述】:

我正在尝试使用适用于 iOS 的 google sheet API 进行批量更新,但在 'data[0].values[0]' (type.googleapis.com/google.protobuf.ListValue) 处收到错误无效值,

这是我的代码

 NSString *baseUrl = @"https://sheets.googleapis.com/v4/spreadsheets/";
NSString *spreadsheetId = @"1tJd4toWFxmHAEOeONauRPcuH_rWJOESLQT7TvCIK0x0";

baseUrl= [baseUrl stringByAppendingString:spreadsheetId];
baseUrl = [baseUrl stringByAppendingString:@"/values:batchUpdate/"];



NSMutableDictionary * params=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"USER_ENTERED",@"valueInputOption", nil];

NSURL *postURL=[GTLUtilities URLWithString:baseUrl queryParameters:params];

NSLog(@"base url is %@", postURL);

GTLObject * body=[[GTLObject alloc]init];



NSMutableArray * titleArray=[[NSMutableArray alloc]initWithObjects:@"Customer ID",@"Customer Name",@"Latitude",@"Longitude" ,@"Last_Updated_At",nil];
NSMutableArray * wheelArray2=[[NSMutableArray alloc]initWithObjects:@"rt",@"SHJ",@"150.00",@"100.00",@"2:00:00", nil];

//[contentArray addObject:titleArray];



NSMutableDictionary * batchParams=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"USER_ENTERED",@"valueInputOption", nil];


NSMutableArray * batchParametersContentArray=[[NSMutableArray alloc]init];


NSMutableDictionary*  batchParametersTitlesDict=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Sheet1!A1:E1",@"range",@"COLUMNS",@"majorDimension",titleArray,@"values", nil];


NSMutableDictionary*  batchParametersContentDict=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Sheet1!A7:E7",@"range",@"ROWS",@"majorDimension",wheelArray2,@"values", nil];


[batchParametersContentArray addObject:batchParametersTitlesDict];

[batchParametersContentArray addObject:batchParametersContentDict];

[batchParams setObject:batchParametersContentArray forKey:@"data"];


NSLog(@"batch params are %@",batchParams);


body.JSON=batchParams;


[self.service fetchObjectByInsertingObject:body forURL:postURL completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) {
    if (error==nil) {
        NSLog(@"batch performed successfully");
    }
    else
    {
        NSLog(@"error is %@", error);
    }

}];

我的请求参数是

batch params are {
data =     (
            {
        majorDimension = COLUMNS;
        range = "Sheet1!A1:E1";
        values =             (
            "Customer ID",
            "Customer Name",
            Latitude,
            Longitude,
            "Last_Updated_At"
        );
    },
            {
        majorDimension = ROWS;
        range = "Sheet1!A7:E7";
        values =             (
            rt,
            SHJ,
            "150.00",
            "100.00",
            "2:00:00"
        );
    }
);
valueInputOption = "USER_ENTERED";
}

错误是

error is Error Domain=com.google.GTLJSONRPCErrorDomain Code=400 "(Invalid value at 'data[0].values[0]' (type.googleapis.com/google.protobuf.ListValue), "Customer ID"

'data[0].values[1]' (type.googleapis.com/google.protobuf.ListValue) 中的值无效,“客户名称” 'data[0].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“纬度” 'data[0].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“经度” 'data[0].values[4]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“Last_Updated_At” 'data[1].values[0]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“rt” 'data[1].values[1]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“SHJ” 'data[1].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“150.00” 'data[1].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“100.00” 'data[1].values[4]' 处的值无效(type.googleapis.com/google.protobuf.ListValue),“2:00:00”)” UserInfo={error='data[0] 处的值无效.values[0]' (type.googleapis.com/google.protobuf.ListValue), "客户 ID" 'data[0].values[1]' (type.googleapis.com/google.protobuf.ListValue) 中的值无效,“客户名称” 'data[0].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“纬度” 'data[0].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“经度” 'data[0].values[4]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“Last_Updated_At” 'data[1].values[0]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“rt” 'data[1].values[1]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“SHJ” 'data[1].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“150.00” 'data[1].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“100.00” 'data[1].values[4]' 处的值无效(type.googleapis.com/google.protobuf.ListValue),“2:00:00”,NSLocalizedFailureReason=('data[0].values[ 处的值无效0]' (type.googleapis.com/google.protobuf.ListValue), "客户 ID" 'data[0].values[1]' (type.googleapis.com/google.protobuf.ListValue) 中的值无效,“客户名称” 'data[0].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“纬度” 'data[0].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“经度” 'data[0].values[4]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“Last_Updated_At” 'data[1].values[0]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“rt” 'data[1].values[1]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“SHJ” 'data[1].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“150.00” 'data[1].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“100.00” 'data[1].values[4]' (type.googleapis.com/google.protobuf.ListValue), "2:00:00") 处的值无效,GTLStructuredError=GTLErrorObject 0x7f89ca465990: {code:400 message:"Invalid 'data[0].values[0]' 处的值(type.googleapis.com/google.protobuf.ListValue),“客户 ID” 'data[0].values[1]' (type.googleapis.com/google.protobuf.ListValue) 中的值无效,“客户名称” 'data[0].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“纬度” 'data[0].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“经度” 'data[0].values[4]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“Last_Updated_At” 'data[1].values[0]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“rt” 'data[1].values[1]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“SHJ” 'data[1].values[2]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“150.00” 'data[1].values[3]' (type.googleapis.com/google.protobuf.ListValue) 处的值无效,“100.00” 'data[1].values[4]' 处的值无效(type.googleapis.com/google.protobuf.ListValue),“2:00:00”错误?:[1] 状态?:“INVALID_ARGUMENT”}}

【问题讨论】:

    标签: ios google-api google-api-client google-sheets-api


    【解决方案1】:

    值是一个二维数组。它们应该是 [[ 'a', 'b', 'c'], [ 1, 2, 3 ]]

    您将值作为一维数组 ['a', 'b', 'c'] 提供,并且错误消息抱怨 'a' 不能放入 ListValue,因为它不是数组。解决方案是使用 2d 数组,但我无法在此处提供您应该做什么的示例,因为我不确定您打算如何将输入映射到电子表格。

    【讨论】:

    • 我刚刚创建了一个二维数组,{ data = ( ( "Customer ID", "Customer Name", Latitude, Longitude, "Last_Updated_At" ), ( rt, SHJ, "150.00", "100.00 ", "2:00:00" ) ); valueInputOption = "USER_ENTERED"; 'data[0]' (type.googleapis.com/google.apps.sheets.v4.ValueRange) 处的值无效,“客户 ID”
    • 数据字段不是二维数组,每个值字段都是。数据字段与您之前的一样正确。
    • { data = ({ majorDimension = ROWS; range = "Sheet1!A7:E7"; values = ( ("客户 ID", "客户名称", Latitude, Longitude, "Last_Updated_At"), ( rt, SHJ, "150.00", "100.00", "2:00:00" ) ); });valueInputOption = "USER_ENTERED"; }
    • 它失败了 Error Domain=com.google.GTLJSONRPCErrorDomain Code=400 "(Invalid data[0]: Requested writing in range [Sheet1!A7:E7], but try writing to row [8] ])
    • 那是你的新问题。您要求只在第 7 行写入,但包含的数据会将写入扩展到第 8 行。您可以将请求的范围更改为更大,也可以删除数据使其只写入一行。
    【解决方案2】:

    错误表明请求参数的值无效,错误响应提供有关哪个值无效的信息。不要在未解决问题的情况下重试。您需要为错误响应中指定的参数提供有效值。您需要对 API 查询进行更改才能使其正常工作。您的 Customer Name, Latitude, Longitude 值无效。检查您的错误日志。

    这里有一篇 Sheets API BatchUpdate 博客遇到 400 错误响应:https://github.com/google/google-api-nodejs-client/issues/588

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      相关资源
      最近更新 更多