Google 张 API - 下载没有格式的数据
Google sheets API - download data with no formatting
使用 Go,在获取 sheet 数据时,数据以其应用的单元格格式到达
即 "3,456"
而我需要原始的 123456
.
api 中是否有可以删除格式的内容?喜欢 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())
}
}
是的,有办法。在Method: spreadsheets.values.get endpoint, there is a request parameter called valueRenderOption中,它的其中一个值是UNFORMATTED_VALUE,顾名思义,它会返回所有没有格式的数据。
Try this Request 与您想要使用 API 的值范围,并以这种方式查看它将 return 的未格式化值。
- 您想从 Google 电子表格中将
3,456
检索为 123456
。
3,456
由单元格格式显示。其实就是这个数字。
- 您想使用
gopkg.in/Iwark/spreadsheet.v2
和 golang 来实现此目的。
- 您已经能够使用带有表格 API 的服务帐户为 Google 电子表格获取和放置值。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 当我看到 the script of the library of
gopkg.in/Iwark/spreadsheet.v2
时,我注意到这些值是通过 Sheets API. 中的 spreadsheets.get 方法检索的
- 此外,发现
spreadsheetId,properties.title,sheets(properties,data.rowData.values(formattedValue,note))
was used as the fields。似乎字段是恒定的。
您遇到问题的原因是这些值是使用 formattedValue
检索的。在您的情况下,需要使用 userEnteredValue
.
检索值
当你想使用gopkg.in/Iwark/spreadsheet.v2
的库来实现你的目的时,为了将以上反映到库中,需要修改库的脚本。
修改后的脚本:
请修改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"
)
3。 cell_data.go
修改the line 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时,示例脚本如下。本例作为测试用例,使用了spreadsheets.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:
使用spreadsheets.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
is used for retrieving the values without the cell format. This has already been answered by
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
使用 Go,在获取 sheet 数据时,数据以其应用的单元格格式到达
即 "3,456"
而我需要原始的 123456
.
api 中是否有可以删除格式的内容?喜欢 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())
}
}
是的,有办法。在Method: spreadsheets.values.get endpoint, there is a request parameter called valueRenderOption中,它的其中一个值是UNFORMATTED_VALUE,顾名思义,它会返回所有没有格式的数据。
Try this Request 与您想要使用 API 的值范围,并以这种方式查看它将 return 的未格式化值。
- 您想从 Google 电子表格中将
3,456
检索为123456
。 3,456
由单元格格式显示。其实就是这个数字。- 您想使用
gopkg.in/Iwark/spreadsheet.v2
和 golang 来实现此目的。 - 您已经能够使用带有表格 API 的服务帐户为 Google 电子表格获取和放置值。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 当我看到 the script of the library of
gopkg.in/Iwark/spreadsheet.v2
时,我注意到这些值是通过 Sheets API. 中的 spreadsheets.get 方法检索的
- 此外,发现
spreadsheetId,properties.title,sheets(properties,data.rowData.values(formattedValue,note))
was used as the fields。似乎字段是恒定的。
您遇到问题的原因是这些值是使用 formattedValue
检索的。在您的情况下,需要使用 userEnteredValue
.
当你想使用gopkg.in/Iwark/spreadsheet.v2
的库来实现你的目的时,为了将以上反映到库中,需要修改库的脚本。
修改后的脚本:
请修改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"
)
3。 cell_data.go
修改the line 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时,示例脚本如下。本例作为测试用例,使用了spreadsheets.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:
使用spreadsheets.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
is used for retrieving the values without the cell format. This has already been answered by
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。