2 回答

TA贡献1775条经验 获得超8个赞
是的,有办法。在Method: spreadsheets.values.get端点中,有一个名为valueRenderOption的请求参数,它的值之一是UNFORMATTED_VALUE,顾名思义,它将返回所有没有格式的数据。
使用您想要使用 API 的值范围尝试此请求,并以这种方式查看它将返回的未格式化值。

TA贡献1777条经验 获得超10个赞
您想从 Google 电子表格
$123,456
中检索。123456
$123,456
由单元格格式显示。其实就是这个数。您想使用
gopkg.in/Iwark/spreadsheet.v2
golang 来实现这一点。您已经能够使用带有 Sheets API 的服务帐户获取和放置 Google 电子表格的值。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
修改点:
当我看到的库的脚本时
gopkg.in/Iwark/spreadsheet.v2
,我注意到这些值是通过 Sheets API 中的电子表格.get 方法检索的。此外,发现它
spreadsheetId,properties.title,sheets(properties,data.rowData.values(formattedValue,note))
被用作字段。字段似乎是恒定的。
您的问题的原因是这些值是用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已经回答了这个问题
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报