如何使用Google Sheets API V4从Swift 2.2创建新的Google Sheet? [英] How do I create a new Google Sheet from Swift 2.2 using Google Sheets API V4?

查看:118
本文介绍了如何使用Google Sheets API V4从Swift 2.2创建新的Google Sheet?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Google Sheets API V4和Swift 2.2创建一个新的Google工作表.我希望获得带有电子表格ID的返回对象.我想提供一个标题.我的猜测是我没有正确设置URL参数的格式.预先感谢任何可以提供帮助的人!

import GoogleAPIClient
import GTMOAuth2
import UIKit

class ViewController: UIViewController {
     private let kKeychainItemName = "Google Sheets API"

    private let kClientID = "blah-blahblahblah.apps.googleusercontent.com"
    private let scopes = ["https://www.googleapis.com/auth/spreadsheets"]
    private let service = GTLService()

...
...
...

 func createNewSheet() {
        print("Creating New Sheet ...\n")
        let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets"
        let params = ["title": "NewSheet"]
        let fullUrl = GTLUtilities.URLWithString(baseUrl,queryParameters: params)

        service.fetchObjectWithURL(fullUrl,
                                   objectClass: GTLObject.self,
                                   delegate: self,
                                   didFinishSelector: #selector(ViewController.displayResultWithTicket2(_:finishedWithObject:error:))
        )
    }

    func displayResultWithTicket2(ticket: GTLServiceTicket,
                                 finishedWithObject object : GTLObject,
                                                    error : NSError?) {

        if let error = error {
            showAlert("Error", message: error.localizedDescription)
            return
        }

        print(object)

        ...
        ...

解决方案

添加新表在Sheetsv4中,使用:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

URI请求正文:

{
  "requests": [
    {
      "addSheet": {
        "properties": {
          "title": "Deposits",
          "gridProperties": {
            "rowCount": 20,
            "columnCount": 12
          },
          "tabColor": {
            "red": 1.0,
            "green": 0.3,
            "blue": 0.4
          }
        }
      }
    }
  ]
}

如何在Swift中执行此操作?

使用HTTP请求,例如NSURLNSURLRequestNSURLSessionNSURLConnection

使用NSURLSession

初始化NSURL对象和NSURLSession中的NSURLSessionDataTask.然后使用resume()运行任务.

let url = NSURL(string: "http://www.stackoverflow.com")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    print(NSString(data: data!, encoding: NSUTF8StringEncoding))
}

task.resume()

为此代码段的此线程. /p>

I am attempting to create a new google sheet using the Google Sheets API V4 and Swift 2.2. I am hoping to get a return object with the spreadsheetID. I would like to provide a title. My guess is that i am not formatting the URL parameter correctly. Thanks in advance for anyone who can help!

import GoogleAPIClient
import GTMOAuth2
import UIKit

class ViewController: UIViewController {
     private let kKeychainItemName = "Google Sheets API"

    private let kClientID = "blah-blahblahblah.apps.googleusercontent.com"
    private let scopes = ["https://www.googleapis.com/auth/spreadsheets"]
    private let service = GTLService()

...
...
...

 func createNewSheet() {
        print("Creating New Sheet ...\n")
        let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets"
        let params = ["title": "NewSheet"]
        let fullUrl = GTLUtilities.URLWithString(baseUrl,queryParameters: params)

        service.fetchObjectWithURL(fullUrl,
                                   objectClass: GTLObject.self,
                                   delegate: self,
                                   didFinishSelector: #selector(ViewController.displayResultWithTicket2(_:finishedWithObject:error:))
        )
    }

    func displayResultWithTicket2(ticket: GTLServiceTicket,
                                 finishedWithObject object : GTLObject,
                                                    error : NSError?) {

        if let error = error {
            showAlert("Error", message: error.localizedDescription)
            return
        }

        print(object)

        ...
        ...

解决方案

To add a new sheet in Sheetsv4, use:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate

URI request body:

{
  "requests": [
    {
      "addSheet": {
        "properties": {
          "title": "Deposits",
          "gridProperties": {
            "rowCount": 20,
            "columnCount": 12
          },
          "tabColor": {
            "red": 1.0,
            "green": 0.3,
            "blue": 0.4
          }
        }
      }
    }
  ]
}

How to do this in Swift?

Make use of HTTP requests like NSURL, NSURLRequest and NSURLSession or NSURLConnection

Using NSURLSession

Initialize an NSURL object and an NSURLSessionDataTask from NSURLSession. Then run the task with resume().

let url = NSURL(string: "http://www.stackoverflow.com")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    print(NSString(data: data!, encoding: NSUTF8StringEncoding))
}

task.resume()

Credits to this thread for that snippet.

这篇关于如何使用Google Sheets API V4从Swift 2.2创建新的Google Sheet?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆