代码之家  ›  专栏  ›  技术社区  ›  EldadT

googlesheetsapi-下载没有格式的数据

  •  0
  • EldadT  · 技术社区  · 6 年前

    使用Go,在获取图纸数据时,数据将与其应用的单元格格式一起到达 "$123,456" 我需要原件 123456 .

    formatting: false

    代码:

    package main
    
    import (
        "log"
    
        "golang.org/x/net/context"
        "golang.org/x/oauth2/google"
        "gopkg.in/Iwark/spreadsheet.v2"
    )
    
    func main() {
        service := authenticate()
        spreadsheet, err := service.FetchSpreadsheet(spreadsheetID)
        checkError(err)
        sheet, err := spreadsheet.SheetByIndex(1)
        checkError(err)
    
        for _, row := range sheet.Rows {
            var csvRow []string
            for _, cell := range row {
                csvRow = append(csvRow, cell.Value)
            }
            log.Println(csvRow)
        }
    }
    
    // function to authenticate on Google
    func authenticate() *spreadsheet.Service {
        data, err := ioutil.ReadFile("secret.json")
        checkError(err)
        conf, err := google.JWTConfigFromJSON(data, spreadsheet.Scope)
        checkError(err)
        client := conf.Client(context.TODO())
        service := spreadsheet.NewServiceWithClient(client)
        return service
    }
    
    func checkError(err error) {
        if err != nil {
            panic(err.Error())
        }
    }
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Tanaike    6 年前
    • $123,456 作为 123456 来自谷歌电子表格。
    • $123,456
    • 你想通过使用 gopkg.in/Iwark/spreadsheet.v2
    • 您已经能够使用带有Sheets API的服务帐户获取和放置Google电子表格的值。

    如果我的理解是正确的,这个答案怎么样?请把这看作是几种可能的答案之一。

    出现问题的原因是使用 formattedValue userEnteredValue .

    当你想实现你的目标时使用 gopkg.in/Iwark/spreadsheet文件.v2版

    修改脚本:

    请修改的文件 如下所示。当然,为了回到原来的库,请备份原来的文件。

    1 service.go

    the line 116 如下所示。

    fields := "spreadsheetId,properties.title,sheets(properties,data.rowData.values(formattedValue,note))"
    
    收件人:
    fields := "spreadsheetId,properties.title,sheets(properties,data.rowData.values(formattedValue,note,userEnteredValue))"
    

    2 sheet.go

    the line 52 如下所示。

    发件人:
    Value:  cellData.FormattedValue,
    
    Value:  strconv.FormatFloat(cellData.UserEnteredValue.NumberValue, 'f', 4, 64),
    

    并添加 "strconv" import

    import (
        "encoding/json"
        "strings"
        "strconv"
    )
    

    三。 cell_data.go

    修改 the line 8 如下所示。

    发件人:
    // UserEnteredFormat *CellFormat `json:"userEnteredFormat"`
    
    收件人:
    UserEnteredFormat struct {
        NumberValue float64 `json:"numberValue"`
    } `json:"userEnteredFormat"`
    

    结果:

    [123456.0000]

    其他模式:

    作为实现目标的另一种模式,使用googleapi go客户端怎么样?关于这个,你可以在 Go Quickstart . 当使用googleapi go客户端时,示例脚本如下所示。在本例中,作为一个测试用例电子表格.get使用了。

    在这个示例脚本中, authenticate() checkError() 在您的脚本中,由修改使用。

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
    
        "golang.org/x/net/context"
        "golang.org/x/oauth2/google"
        "google.golang.org/api/sheets/v4"
    )
    
    func main() {
        c := authenticate()
        sheetsService, err := sheets.New(c)
        checkError(err)
        spreadsheetId := "###"  // Please set the Spreadsheet ID.
        ranges := []string{"Sheet1"}  // Please set the sheet name.
        resp, err := sheetsService.Spreadsheets.Get(spreadsheetId).Ranges(ranges...).Fields("sheets.data.rowData.values.userEnteredValue").Do()
        checkError(err)
        for _, row := range resp.Sheets[0].Data[0].RowData {
            for _, col := range row.Values {
                fmt.Println(col.UserEnteredValue)
            }
        }
    }
    
    func authenticate() *http.Client {
        data, err := ioutil.ReadFile("serviceAccount_20190511.json")
        checkError(err)
        conf, err := google.JWTConfigFromJSON(data, sheets.SpreadsheetsScope)
        checkError(err)
        client := conf.Client(context.TODO())
        return client
    }
    
    func checkError(err error) {
        if err != nil {
            panic(err.Error())
        }
    }
    

    示例脚本2:

    什么时候电子表格.values.get使用的脚本 main() 具体如下。

    func main() {
        c := authenticate()
        sheetsService, err := sheets.New(c)
        checkError(err)
        spreadsheetId := "###"  // Please set the Spreadsheet ID.
        sheetName := "Sheet1"  // Please set the sheet name.
        resp, err := sheetsService.Spreadsheets.Values.Get(spreadsheetId, sheetName).ValueRenderOption("UNFORMATTED_VALUE").Do()
        checkError(err)
        fmt.Println(resp.Values)
    }
    

    参考文献:

        2
  •  3
  •   alberto vielma    6 年前

    是的,有办法。在 Method: spreadsheets.values.get 端点,有一个名为 valueRenderOption ,它的哪个值是 未格式化的\u值 ,顾名思义,它将返回所有不带格式的数据。

    Try this Request 使用您希望在API中使用的值范围,并以这种方式查看它将返回的未格式化值。