【问题标题】:How can I make basic writing via Google Sheets API?如何通过 Google Sheets API 进行基本写作?
【发布时间】:2016-06-14 11:19:58
【问题描述】:

在使用 Swift 学习 Google Sheets API 的过程中,我想将单个范围写入电子表格。

查看Quickstart iOS GuideBasic Writing examples 我得到了这段代码:

func constructAndSendAQuery() {
    let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets"
    let spreadsheetId = "1FhbBdEvpcyHsdfgsdft65eDGHre2fLVki5ZolMmZaRs"
    let range = "Sales!A31:C31"
    let url = baseUrl + "/" + spreadsheetId + "/values/" + range
    let params = ["valueInputOption": "RAW"]
    let fullUrl = GTLUtilities.URLWithString(url, queryParameters: params)

    let body = GTLObject()
    body.JSON = ["majorDimension":"ROWS",
                 "values": ["One", "Two", "Three"]]

    service.fetchObjectByInsertingObject(body, 
                                         forURL: fullUrl,
                                         delegate: self, 
                                         didFinishSelector: #selector(ViewController.processTheResponse(_:finishedWithObject:error:)))
}

不知道我做错了什么,但我收到了错误消息:“在此服务器上找不到请求的 URL”。

【问题讨论】:

    标签: ios swift google-sheets-api


    【解决方案1】:

    正如@sam-berlin 所说,我应该使用fetchObjectByUpdatingObject 而不是fetchObjectByInsertUpdating

    但是还有一个小错误/错字。在构造 JSON 时,我丢失了一对方括号,并收到关于无效值的错误。

    工作代码如下所示:

    func constructAndSendARequest() {
    
        let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets"
        let spreadsheetId = "1FhbBdEvpsfgzb3Akn1opmru0iresdfglbki5ZMmZaRs"
        let range = "Sales!A3:D3"
        let url = baseUrl + "/" + spreadsheetId + "/values/" + range
        let params = ["valueInputOption": "RAW"]
        let fullUrl = GTLUtilities.URLWithString(url, queryParameters: params)
    
    
        let body = GTLObject()
        body.JSON = ["range": range,
                     "majorDimension": "ROWS",
                     "values": [["One", "Two", "Three"]]]
    
        service.fetchObjectByUpdatingObject(body, forURL: fullUrl, delegate: self, didFinishSelector: #selector(ViewController.processTheResponse(_:finishedWithObject:error:)))   
    }
    

    也可以使用service.fetchObjectByUpdatingObject(body, forURL: fullUrl, completionHandler: nil) 而不处理响应。

    【讨论】:

      【解决方案2】:

      根据GTLService codefetchObjectByInsertUpdating 执行POST,而此请求需要PUT。看来fetchObjectByUpdatingObject 应该做一个PUT,所以试试吧。

      【讨论】:

        【解决方案3】:

        如果有人需要,我在类似问题上回答了here。 您可以使用 GTLRSheets_ValueRange() 对象和 GTLRSheetsQuery_SpreadsheetsValuesUpdate.query(withObject: 通过 Google Sheets API 创建或更新任何单元格。

        let service = GTLRSheetsService()
        service.authorizer = GIDSignIn.sharedInstance().currentUser.authentication.fetcherAuthorizer()
        service.apiKey = Constants.GOOGLE_SPEADSHEET_API_KEY
        let rowIndex:Int = job.rowIndex
        let range = "Employee List!C\(rowIndex):C\(rowIndex)"
        let valueRange = GTLRSheets_ValueRange()
        valueRange.range = "Employee List!C\(rowIndex):C\(rowIndex)"
        valueRange.values = [[job.jobTitle!]]
        valueRange.majorDimension = "COLUMNS"
        
        let query = GTLRSheetsQuery_SpreadsheetsValuesUpdate.query(withObject: valueRange, spreadsheetId:  Constants.SPREAD_SHEET_ID, range: range)
        query.valueInputOption = "USER_ENTERED"
        
        service.executeQuery(query) { (ticket, response, error) in
            print(response)
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多