WedX - журнал о программировании и компьютерных науках

Golang Google Sheets API V4 - пример записи / обновления?

Пытался написать простую таблицу из трех столбцов ([][]string) с помощью Go, но не смог. Руководство по быстрому запуску очень хорошее, теперь я могу читать листы, но нет никаких примеров о том, как записывать данные на лист, может быть, это тривиально, но не мне кажется. Библиотека Golang для моего мозга слишком сложно понять. И там ни одного примера я не смог бы погуглить ...

Этот пример C # очень похож на не уверен, что четко понимаю C #

25.09.2016

  • Проголосовали за признание того, что некоторые вещи слишком сложны для понимания вашего мозга. Некоторые люди, кажется, думают, что существование кода, который вы можете прочитать, является оправданием для того, чтобы не создавать хорошую документацию - я не один из таких людей. 29.09.2018

Ответы:


1

Что ж, после некоторых попыток ответ есть. Все как в https://developers.google.com/sheets/quickstart/go Просто изменения в основной функции

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)
    }

}
26.09.2016

2

Что ж, если вы ищете аутентификацию на основе учетной записи службы, то у меня сработало следующее.

Загрузите секретный файл клиента для учетной записи службы со страницы https://console.developers.google.com.

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"`
}
11.11.2019
  • Отличный подход для тех, кто не хочет иметь дело с интерактивным процессом разрешения OAuth2, т.е. вы хотите, чтобы он был на стороне сервера. Получите ключ, и все готово. Единственная проблема здесь заключается в том, что учетная запись службы должна быть назначена владельцем проекта, а затем вы отправляете требуемый лист с электронной почтой учетной записи. Процесс описан здесь stackoverflow.com/questions/38949318/ 15.01.2020

  • 3
    1. измените область видимости в примере быстрого запуска с spreadsheets.readonly на spreadsheets для доступа для чтения / записи
    2. вот фрагмент записи:
        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()
    

    и это должно работать:

    07.10.2020
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]