如何在Swift中写入Google表格 [英] How to write to Google Sheets in Swift

查看:61
本文介绍了如何在Swift中写入Google表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试通过遵循此Google api来写入Google表格文档,但我没有取得太大的成功.我什至不确定我是否遵循正确的api,因为它显示的是"Appscript",看起来像Swift.

I'm trying to write to a Google Sheets document by following this google api, but I'm not having much success. I'm not even sure I'm following the right api, because it says "Appscript" and looks like Swift.

我已经能够使用以下方法从工作表中读取数据:

I've been able to read in data from the sheets using:

private let scopes = [kGTLRAuthScopeSheetsSpreadsheets]
private let service = GTLRSheetsService()

override func viewDidLoad() {
    super.viewDidLoad()
    self.service.authorizer = GIDSignIn.sharedInstance().currentUser.authentication.fetcherAuthorizer()
    getData()
}

func getData() {
        let spreadsheetId = "1OAbhzY7RlfCEre-I5e-Kcgz16eHz2cGpO9HZKOiizCs" // Portfolio
    let query = GTLRSheetsQuery_SpreadsheetsValuesGet.query(withSpreadsheetId: spreadsheetId, range:range)
    service.executeQuery(query, delegate: self, didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
}

我尝试按照api所说的部分进行操作:

I tried following the section where the api says:

// This code uses the Sheets Advanced Service, but for most use cases
// the built-in method SpreadsheetApp.getActiveSpreadsheet()
//     .getRange(range).setValues(values) is more appropriate.
var values = [
  [
    // Cell values ...
  ]
  // Additional rows ...
];
var valueRange = Sheets.newValueRange();
valueRange.values = values;
var result = Sheets.Spreadsheets.Values.update(valueRange, spreadsheetId, range, {
  valueInputOption: valueInputOption
});

但是我对SpreadsheetsApp.getActiveSpreadsheet()的来源很迷失.我真的不知道SpreadsheetsApp或Sheets对象/库是什么,当我尝试在我的代码中使用它时,它似乎并不存在

But I'm very lost in what SpreadsheetsApp.getActiveSpreadsheet() is coming from. I don't really know what the SpreadsheetsApp or Sheets object/library even is, and it doesn't seem to exist when I try to use it in my code

我完全不知道该怎么做,我尝试过:

Being utterly lost on how to do this, I tried:

func writeData() {
    let spreadsheetId = "1OAbhzY7RlfCEre-I5e-Kcgz16eHz2cGpO9HZKOiizCs"
    let range = "A1:E"
    let query = GTLRSheetsQuery_SpreadsheetsValuesGet.query(withSpreadsheetId: spreadsheetId, range:range)
    var values = [[]]
    var valueRange = query.newValueRange()
    valueRange.values = values
    var result = query.values.update(valueRange, spreadsheetId, range, {
        valueInputOption: valueInputOption
    })
}

但是,正如预期的那样,由于查询没有newValueRange方法,values.update方法或类似的东西,我遇到了很多错误.

But, as expected, I get a lot of errors since query does not have a newValueRange method, or a values.update method or anything like that.

有人可以帮助我吗?我很迷茫

Can anyone help me please? I'm very lost

推荐答案

我设法弄清楚了.因此,为了写入Google工作表,我需要一个使用Alamofire发送的JSON PUT请求(或POST请求).由于我之前已经在应用程序中配置了Google登录,因此只需找出语法并从我的 GIDSignIn.sharedInstance().currentUser.authentication.accessToken 中应用授权令牌,然后使用它作为Alamofire JSON请求中的标头.这是代码:

I managed to figure it out. So in order to write to google sheets, I needed a JSON PUT request (or POST request), which I sent in using Alamofire. Since I had already configured Google Sign-In previously in my app, all it took was to figure out the syntax and apply the authorization token from my GIDSignIn.sharedInstance().currentUser.authentication.accessToken and use it as a header in the Alamofire JSON request. Here is the code:

import GoogleSignIn
import GoogleAPIClientForREST
import Foundation

import Alamofire

class TestController: UIViewController {

    private let scopes = [kGTLRAuthScopeSheetsSpreadsheets]
    private let service = GTLRSheetsService()

    override func viewDidLoad() {
        super.viewDidLoad()

        let sheetID = "1OAbhzY7RlfCEre-I5e-Kcgz16eHz2cGpO9HZKOiizCs"
        let range = "A3:B4"
        let requestParams = [
            "values": [ 
                ["hi1", "hi2"],
                ["hi3", "hi4"]
                ]
            ]
        let accessToken = GIDSignIn.sharedInstance().currentUser.authentication.accessToken!
        let header = ["Authorization":"Bearer \(accessToken)"]
        let requestURL = "https://sheets.googleapis.com/v4/spreadsheets/\(sheetID)/values/\(range)?valueInputOption=USER_ENTERED"
        let req = Alamofire.request(requestURL, method: .put, parameters: requestParams, encoding: JSONEncoding.default, headers: header)
        req.responseJSON { response in debugPrint(response) }
    }

}

这篇关于如何在Swift中写入Google表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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