【问题标题】:Accessing Google Spreadsheet data via header names通过标题名称访问 Google 电子表格数据
【发布时间】:2012-11-24 22:25:24
【问题描述】:

Google 电子表格 API 让您可以使用标题名称向电子表格中添加行,此过程描述为 here

然而,文档只是给出了一个简单的例子,其中标题文本由小写文本(或适合表达式 [a-z0-9] 的文本)组成。

我的应用程序要求我能够为文本设置任意标题名称(即那些不一定符合上述表达式的标题)。通过大量实验,我发现通常不支持特殊字符和符号(句号除外)。要访问使用包含特殊字符的标题行的电子表格,必须使用已删除特殊字符的标题文本。

这些转换不是documented,我主要通过反复试验找到它们。

例如,要通过 API 访问标题为 'Foo Bar' 的列,需要将标题文本转换为 'foobar'。同样,'Foo.Bar' 变为 'foo.bar'

也必须消除一些特殊字符,但是我的代码中不断出现极端情况。

需要对实际的标题文本进行哪些转换才能通过 API 访问它?

同样对于这个spreadsheet,标题文本'País''país' 的转换似乎不起作用。我怀疑它与非ASCII字符'í'有关

任何建议将不胜感激。

【问题讨论】:

  • 请说出你的问题。有点混乱。

标签: python google-sheets google-drive-api google-spreadsheet-api


【解决方案1】:

您必须记住,在使用“列表提要”时,它使用 XML 元素来分隔每个值,并从工作表中的第 1 行获取字段名称。因此,名称的限制是 XML 元素名称的限制。 XML.com 上有一篇关于它的文章here

至于他们用来将各种标题单元格值转换为有效的 XML 元素名称的确切算法,我从未见过 Google 指定这一点(尽管人们之前已经要求澄清)。然而,人们可能会想象它是这样的:

foreach char in cell.value {
   if (isAllowed(char)) {
      name += char;
   }
}
return name;

当然,它们确实倾向于省略个空格(例如),而不是将它们(这是相当合理的)转换为下划线。

现在关于 ASCII 集之外的字符...

如果您的 í 是“LATIN SMALL LETTER I WITH ACUTE”,那么它的 Unicode 代码点是 U+00ED,并且在 XML-land 中写为 í。因此,它是 XML 名称的有效字符。从http://www.w3.org/TR/REC-xml/#NT-NameChar,它确实似乎是一个有效的NameStartChar

 [4]    NameStartChar      ::=      ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
 [4a]       NameChar       ::=      NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
 [5]    Name       ::=      NameStartChar (NameChar)*

如果他们确实有类似上面的算法,那么 í 应该是“in”。但是,我会密切注意您发送电子表格 API 的编码以及它发送回给您的编码。我不会放过谷歌在这方面有错误。

您当然可以做一个实验:使用 Google Apps 用户界面将值放在工作表的标题行,然后对 List 提要执行 GET,以查看 XML 的实际结果。 (但我希望你到目前为止一直在实验中使用它)。

祝你好运。

【讨论】:

  • 感谢您的建议。到目前为止,我一直在尝试使用 python 客户端。我有一个类似于您所描述的算法,并且我会针对遇到的任何极端情况不断更改它。然而,我很惊讶 Unicode 字符 U+00ED 似乎没有被允许。也许它与表示有关。我想看看是不是这样。
猜你喜欢
  • 2017-01-23
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多