在 Swift 中写入 Google 表格

Posted

技术标签:

【中文标题】在 Swift 中写入 Google 表格【英文标题】:Write to Google Sheets in Swift 【发布时间】:2018-11-14 05:39:22 【问题描述】:

我真的很困惑如何写入公开的 Excel 表格。到目前为止,我已经下载了 AlamofireGoogleAPIClientForREST cocoapods。所以我想知道,如果我想写信给工作表,我首先需要实现一个谷歌登录,还是我可以使用 Alamofire 发送数据。我非常迷茫,所以如果有人可以帮助我,那就太好了。

谷歌表:https://docs.google.com/spreadsheets/d/1zJR0uk6Pb6BuxJihFyxwe4ipQdBY4E9FFR74geBj8p0/edit#gid=0

func makeAndSendRequest() 
    let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets"
    let spreadsheetId = "1zJR0uk6Pb6BuxJihFyxwe4ipQdBY4E9FFR74geBj8p0"
    let params = ["valueInputOption": "RAW"]
    let range = "Studen!A3:B3"
    //need to add params
    let url = baseUrl + "/" + spreadsheetId + "/values/" + range + "/valueInputOption=RAW/"

    let fullUrl = URL(string: url)!

    //my values
    let requestParams = [
        "values": [
            1,
            2
        ]
    ]


    //my auth is after Bearer so "Bearer 901390"
    let header = ["Authorization":"Bearer "]
    let requestURL = "https://sheets.googleapis.com/v4/spreadsheets/\(spreadsheetId)/values/\(range)?valueInputOption=RAW"
    let req = Alamofire.request(requestURL, method: .put, parameters: requestParams, encoding: JSONEncoding.default,headers: header)
    req.responseJSON  response in debugPrint(response) 


【问题讨论】:

运行代码时会发生什么?它需要您登录吗?我认为您希望您的电子表格受到保护。 现在我想要最简单的方法来写一张纸,所以老实说我并不担心安全方面,我主要是在寻找垫脚石,因为现在我完全迷路了。一旦我了解了基础知识,我将对其进行改进并使其登录/受保护。 酷。你试过运行你的代码吗?会发生什么? 我得到一个 Alamofire.AFError,所以我假设我没有给服务器提供它所要求的正确参数。 错误是什么? (error.localizedDescription) 【参考方案1】:

尝试先解决这个问题。

valueInputOption是查询参数,见:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update

你的网址至少应该是:

let url = baseUrl + "/" + spreadsheetId + "/values/" + range + "?valueInputOption=RAW"

接下来您需要修复您的请求正文,此处需要每个文档的范围:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update

"range": "A3:B3", "values": [ [ 1, 2 ] ]

此范围应与查询参数中的范围相同,例如查询参数中的Sheet1!:A3:B3

注意,它以工作表名称开头,不应该是“studen”

我在同一页面上使用了 Playground 工具,并且能够调用 api 来更改电子表格中的数据。

最后我得到 200 响应代码和以下 json: "spreadsheetId": "1zJR0uk6Pb6BuxJihFyxwe4ipQdBY4E9FFR74geBj8p0", "updatedRange": "Sheet1!A3:B3", "updatedRows": 1, "updatedColumns": 2, "updatedCells": 2

----- 编辑 ----- 如您所见,API 需要 Oauth 令牌,处理此问题的框架实际上称为 G Suite

请在此处找到指南: https://developers.google.com/gsuite/guides/ios

【讨论】:

嘿,我有一个简单的问题,所以我试过了,但我得到一个错误,告诉我我需要一个身份验证我如何获得这个身份验证密钥? [结果]: SUCCESS: error = code = 401; message = "请求具有无效的身份验证凭据。 @barooongara 你是对的,你必须先通过身份验证才能访问 API,官方页面有使用 api 密钥和 clientId 为 javascript 注册它的指南。 iOS应该有类似的东西。见底部developers.google.com/sheets/api/reference/rest/v4/…initClient函数 我已经获得了这个密钥,并把它放在我的 let header = ["Authorization":"Bearer 18091209 中,但我仍然得到同样的错误。我还确定了 thype 是 IOS 和名称:OAuth 客户端。我已经更新了我的帖子以反映我当前的代码。 你能分享一下你是怎么做认证部分的吗?你必须用root更新你的pList并输入clientID吗?或者你是如何在你的代码中使用这个身份验证的。谢谢帮助。

以上是关于在 Swift 中写入 Google 表格的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 GKE Workload Identity 访问 Google 表格吗?

从 Google 表格按钮调用脚本函数(写入 Google 驱动器中的 .gs 文件)

谷歌钱包应用内付款:未捕获的 ReferenceError:未定义 goog。 google.payments 与 goog.payments

如何使用 Python 访问(读取、写入)Google Sheets 电子表格?

写入电子表格时强制使用 Google Apps 脚本中的小数位

在搜索栏中弹出表格视图,swift 2