Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang google sheets API V4-编写/更新示例?_Go_Google Sheets - Fatal编程技术网

Golang google sheets API V4-编写/更新示例?

Golang google sheets API V4-编写/更新示例?,go,google-sheets,Go,Google Sheets,试图用Go编写一个简单的三列表([]string),但无法。 指南很好,我现在可以阅读工作表了,但是没有任何关于如何将数据写入工作表的例子,也许它很琐碎,但对我来说似乎不是。 对我大脑的影响太复杂了,弄不清楚。 没有一个例子我可以用谷歌搜索 这看起来很接近,但我不确定我是否清楚地理解C#经过一些试用,有一个答案。一切都是一样的,只是在主要功能的变化 func write() { ctx := context.Background() b, err := ioutil.ReadFi

试图用Go编写一个简单的三列表(
[]string
),但无法。 指南很好,我现在可以阅读工作表了,但是没有任何关于如何将数据写入工作表的例子,也许它很琐碎,但对我来说似乎不是。 对我大脑的影响太复杂了,弄不清楚。 没有一个例子我可以用谷歌搜索


这看起来很接近,但我不确定我是否清楚地理解C#

经过一些试用,有一个答案。一切都是一样的,只是在主要功能的变化

func write() {
    ctx := context.Background()
    b, err := ioutil.ReadFile("./Google_Sheets_API_Quickstart/client_secret.json")
    if err != nil {
       log.Fatalf("Unable to read client secret file: %v", err)
    }

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/sheets.googleapis.com-go-quickstart.json
    config, err := google.ConfigFromJSON(b, "https://www.googleapis.com/auth/spreadsheets")
    if err != nil {
        log.Fatalf("Unable to parse client secret file to config: %v", err)
    }
    client := getClient(ctx, config)

    srv, err := sheets.New(client)
    if err != nil {
        log.Fatalf("Unable to retrieve Sheets Client %v", err)
    }

    spreadsheetId := "YOUR SPREADSHEET ID"

    writeRange := "A1"

    var vr sheets.ValueRange

    myval := []interface{}{"One", "Two", "Three"}
    vr.Values = append(vr.Values, myval)

    _, err = srv.Spreadsheets.Values.Update(spreadsheetId, writeRange, &vr).ValueInputOption("RAW").Do()
    if err != nil {
        log.Fatalf("Unable to retrieve data from sheet. %v", err)
    }

}

如果您正在寻找基于服务帐户的身份验证,那么以下内容对我很有用

从下载服务帐户的客户端机密文件

  • 将快速启动示例中的范围从
    spreadsheets.readonly
    更改为
    spreadsheets
    ,以便进行r/w访问
  • 以下是编写代码片段:

  • 这应该行得通:

    投票赞成承认有些事情太复杂,你的大脑无法理解。有些人似乎认为,您可以阅读的代码的存在是不创建好文档的理由——我不是这些人中的一员。对于那些不想处理交互式OAuth2权限过程(即您希望它是服务器端的)的人来说,这是一个极好的方法。拿到钥匙,你就完了。这里唯一的问题是,服务帐户必须被指定为项目所有者,然后您将所需的工作表与帐户的电子邮件共享。这里描述了该过程
    import (
            "fmt"
            "golang.org/x/net/context"
            "google.golang.org/api/option"
            "google.golang.org/api/sheets/v4"
            "log"
        )
    
    
    const (
        client_secret_path = "./credentials/client_secret.json"
    )
    
    
    func NewSpreadsheetService() (*SpreadsheetService, error) {
        // Service account based oauth2 two legged integration
        ctx := context.Background()
        srv, err := sheets.NewService(ctx, option.WithCredentialsFile(client_secret_path), option.WithScopes(sheets.SpreadsheetsScope))
    
        if err != nil {
            log.Fatalf("Unable to retrieve Sheets Client %v", err)
        }
    
        c := &SpreadsheetService{
            service: srv,
        }
    
        return c, nil
    }
    
    
    func (s *SpreadsheetService) WriteToSpreadsheet(object *SpreadsheetPushRequest) error {
    
        var vr sheets.ValueRange
        vr.Values = append(vr.Values, object.Values)
    
        res, err := s.service.Spreadsheets.Values.Append(object.SpreadsheetId, object.Range, &vr).ValueInputOption("RAW").Do()
    
        fmt.Println("spreadsheet push ", res)
    
        if err != nil {
            fmt.Println("Unable to update data to sheet  ", err)
        }
    
        return err
    }   
    
    type SpreadsheetPushRequest struct {
        SpreadsheetId string        `json:"spreadsheet_id"`
        Range         string        `json:"range"`
        Values        []interface{} `json:"values"`
    }
    
        writeRange := "A1" // or "sheet1:A1" if you have a different sheet
        values := []interface{}{"It worked!"}
        var vr sheets.ValueRange
        vr.Values = append(vr.Values,values
        _, err = srv.Spreadsheets.Values.Update(spreadsheetId,writeRange,&vr).ValueInputOption("RAW").Do()