如何确定 Google Sheets API 返回值的数据类型

Jos*_*osh 5 datetime type-conversion google-sheets google-sheets-api

我正在使用 Google 表格 API 从具有未知值的数据集中获取值。我需要弄清楚每个返回值的数据类型(number, boolean, stringdatetime)。

API 将返回数字为number. 我可以检查 a 中的booleanstring,否则将值作为 type 返回string。我需要一种可靠的方法来确定字符串是否应该是类型datetime

Google Sheets 似乎知道每个单元格的数据类型,但我无法获得 API 来返回单元格数据类型。有谁知道我是否可以做到这一点,这可能吗?或者我是否需要使用正则表达式检查每个字符串的可能datetime格式,并在匹配时将字符串强制转换为日期?

Tan*_*ike 5

您可以使用Sheets API v4 的sheet.spreadsheets.get检索单元格格式。在您的情况下,您可以使用sheets(data(rowData(values(userEnteredFormat/numberFormat,userEnteredValue)),startColumn,startRow))作为字段。

例如,当您要检索“A1”的单元格格式时,可以按如下方式使用端点。

端点:

GET https://sheets.googleapis.com/v4/spreadsheets/### spreadsheet ID ###?ranges=sheet1!a1%3Aa1&fields=sheets(data(rowData(values(userEnteredFormat%2FnumberFormat%2CuserEnteredValue))%2CstartColumn%2CstartRow))
Run Code Online (Sandbox Code Playgroud)

以下结果是为 检索到的响应number, boolean, string and datetime

结果 1:

在此示例中,值和格式分别为“123”和数字。

{
 "sheets": [
  {
   "data": [
    {
     "rowData": [
      {
       "values": [
        {
         "userEnteredValue": {
          "numberValue": 123
         },
         "userEnteredFormat": {
          "numberFormat": {
           "type": "NUMBER",
           "pattern": "#,##0.00"
          }
         }
        }
       ]
      }
     ]
    }
   ]
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

结果 2:

在此示例中,值和格式分别为“true”和自动检测到的布尔值。

{
 "sheets": [
  {
   "data": [
    {
     "rowData": [
      {
       "values": [
        {
         "userEnteredValue": {
          "boolValue": true
         }
        }
       ]
      }
     ]
    }
   ]
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

结果 3:

在此示例中,值和格式分别为“123”和字符串。

{
 "sheets": [
  {
   "data": [
    {
     "rowData": [
      {
       "values": [
        {
         "userEnteredValue": {
          "stringValue": "123"
         },
         "userEnteredFormat": {
          "numberFormat": {
           "type": "TEXT"
          }
         }
        }
       ]
      }
     ]
    }
   ]
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

结果 4:

在此示例中,值和格式分别为“2017/10/10 1:23:45”和日期时间。

{
 "sheets": [
  {
   "data": [
    {
     "rowData": [
      {
       "values": [
        {
         "userEnteredValue": {
          "numberValue": 43018.05815972222
         },
         "userEnteredFormat": {
          "numberFormat": {
           "type": "DATE",
           "pattern": "yyyy/MM/dd"
          }
         }
        }
       ]
      }
     ]
    }
   ]
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

numberValue 是序列号。

如果我误解了你的问题,我很抱歉。