为了账号安全,请及时绑定邮箱和手机立即绑定

Google 表格 API - 下载没有格式的数据

Google 表格 API - 下载没有格式的数据

Go
人到中年有点甜 2022-04-26 19:46:40
使用 Go,在获取工作表数据时,数据以其应用的单元格格式到达,即"$123,456"当我需要原始的123456.api中有什么可以删除格式的吗?像formatting: false代码:package mainimport (    "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 Googlefunc 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())    }}
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

是的,有办法。在Method: spreadsheets.values.get端点中,有一个名为valueRenderOption的请求参数,它的值之一是UNFORMATTED_VALUE,顾名思义,它将返回所有没有格式的数据。

使用您想要使用 API 的值范围尝试此请求,并以这种方式查看它将返回的未格式化值。


查看完整回答
反对 回复 2022-04-26
?
不负相思意

TA贡献1777条经验 获得超10个赞

  • 您想从 Google 电子表格$123,456中检索。123456

  • $123,456由单元格格式显示。其实就是这个数。

  • 您想使用gopkg.in/Iwark/spreadsheet.v2golang 来实现这一点。

  • 您已经能够使用带有 Sheets API 的服务帐户获取和放置 Google 电子表格的值。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

修改点:

您的问题的原因是这些值是用formattedValue. 在您的情况下,需要使用 检索这些值userEnteredValue

当你想使用 的库来实现你的目标时gopkg.in/Iwark/spreadsheet.v2,为了将上述反映到库中,需要修改库的脚本。

修改后的脚本:

请修改以下文件gopkg.in/Iwark/spreadsheet.v2。当然,请备份原始文件,以便恢复到原始库。

1.服务.go

将第 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 _

修改第 52 行如下。

从:

Value:  cellData.FormattedValue,

到:

Value:  strconv.FormatFloat(cellData.UserEnteredValue.NumberValue, 'f', 4, 64),

并添加"strconv"import下面的部分。

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

3.cell_data.go _

修改第 8 行如下。

从:

// UserEnteredFormat *CellFormat `json:"userEnteredFormat"`

到:

UserEnteredFormat struct {
    NumberValue float64 `json:"numberValue"`
    } `json:"userEnteredFormat"`

结果:

在这种情况下,不需要修改您的脚本。经过上面的修改,当你运行你的脚本时,你可以[123456.0000]在控制台看到。重要的是,这个库似乎使用这些值作为字符串类型。在这个修改中,我使用了这个。但是如果你想用它作为其他类型,请修改库。

其他图案:

作为实现目标的另一种模式,使用 google-api-go-client 怎么样?关于这一点,您可以在Go Quickstart中看到它。使用 google-api-go-client 时,示例脚本如下。在这种情况下,作为测试用例,使用了电子表格.get 的方法。

示例脚本 1:

在此示例脚本中,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)

}

在这里,UNFORMATTED_VALUE用于检索没有单元格格式的值。alberto vielma已经回答了这个问题


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号