Google Sheet API批量更新问题iOS

时间:2016-08-11 16:10:18

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

我尝试使用google sheet API for iOS进行批量更新,但在数据[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"

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

2 个答案:

答案 0 :(得分:9)

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

您将值作为1d数组['a','b','c']提供,并且错误消息抱怨'a'不能适合ListValue,因为它不是数组。解决方案是使用二维数组,虽然我不能在这里提供一个关于你应该做什么的例子,因为我不确定你打算如何将你的输入映射到电子表格。

答案 1 :(得分:-1)

错误表示请求参数的值无效,错误响应提供有关哪个值无效的信息。如果不解决问题,请勿重试。您需要为错误响应中指定的参数提供有效值。您需要对API查询进行更改才能使其正常工作。您的NOT P2.PNRFNAME = P1.PNRFNAME值无效。检查错误日志。

这是Sheets API BatchUpdate博客遇到400错误回复:https://github.com/google/google-api-nodejs-client/issues/588