Iwark / spreadsheet

Google Go (golang) library for reading and writing spreadsheet files on Google Docs.
MIT License
382 stars 53 forks source link

Returning sheets from functions #22

Closed joneslloyd closed 6 years ago

joneslloyd commented 6 years ago

Hi there,

This is very possibly a 'noob' error, but, when I try to return a Sheet reference from a function, I get this error: ./main.go:39:70: undefined: Sheet and ./main.go:65:15: sheet is not a type

A simplified version of my code is:

package main

import (
    "github.com/leprosus/golang-tts"
    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    "gopkg.in/Iwark/spreadsheet.v2"
    "io/ioutil"
)

func main() {
    //Get Sheet
    sheet, err := getTermsSpreadsheet("sheefRefStringHere", "client_secret.json")
    //Do stuff
}

func getTermsSpreadsheet(spreadsheetID string, clientSecret string) *Sheet {

    data, err := ioutil.ReadFile(clientSecret)

    if err != nil {
        return sheet{}, err
    }

    conf, err := google.JWTConfigFromJSON(data, spreadsheet.Scope)

    if err != nil {
        return sheet{}, err
    }

    client := conf.Client(context.TODO())

    service := spreadsheet.NewServiceWithClient(client)
    spreadsheet, err := service.FetchSpreadsheet(spreadsheetID)

    if err != nil {
        return sheet{}, err
    }

    sheet, err := spreadsheet.SheetByIndex(0)

    if err != nil {
        return sheet{}, err
    }

    return sheet, nil
}

Any help here would be great!

Iwark commented 6 years ago

Hi @joneslloyd , Sorry for the late response..

Your code includes some errors. It should be like this:

package main

import (
    "io/ioutil"

    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    "gopkg.in/Iwark/spreadsheet.v2"
)

func main() {
    //Get Sheet
    sheet, err := getTermsSpreadsheet("sheefRefStringHere", "client_secret.json")
    //Do stuff
    _, _ = sheet, err
}

func getTermsSpreadsheet(spreadsheetID string, clientSecret string) (*spreadsheet.Sheet, error) {

    data, err := ioutil.ReadFile(clientSecret)
    if err != nil {
        return nil, err
    }

    conf, err := google.JWTConfigFromJSON(data, spreadsheet.Scope)
    if err != nil {
        return nil, err
    }

    client := conf.Client(context.TODO())

    service := spreadsheet.NewServiceWithClient(client)
    spreadsheet, err := service.FetchSpreadsheet(spreadsheetID)

    if err != nil {
        return nil, err
    }

    sheet, err := spreadsheet.SheetByIndex(0)
    if err != nil {
        return nil, err
    }

    return sheet, nil
}

If you get any trouble, please tell me. Thanks for using this package!

joneslloyd commented 6 years ago

Ah-ha! Thanks for this! Perfect.

Sorry, my Golang skills are really not great..!

Iwark commented 6 years ago

Your welcome :)