Google Spreadsheet API 让您可以使用标题名称将行添加到电子表格,描述了此过程 here
然而,该文档仅给出了一个简单情况的示例,其中标题文本由小写文本(或适合表达式 [a-z0-9] 的文本)组成。
我的应用程序要求我能够为文本设置任意标题名称(即那些不一定符合上述表达式的名称)。通过大量实验,我发现通常不支持特殊字符和符号(句点除外)。要访问使用包含特殊字符的标题行的电子表格,必须使用已删除特殊字符的标题文本。
这些转换不是 documented我主要是通过反复试验找到它们的。
例如,要通过 API 访问标题为 'Foo Bar'
的列,需要将标题文本转换为 'foobar'
。同样,'Foo.Bar'
变为 'foo.bar'
。
一些特殊字符也必须删除,但是我的代码中不断出现极端情况。
需要对实际标题文本进行哪些转换才能通过 API 访问它?
还有这个spreadsheet标题文本 'País'
到 'país'
的转换似乎不起作用。我怀疑它与非 ASCII 字符 'í'
如有任何建议,我们将不胜感激。
最佳答案
您必须记住,在使用“List feed”时,它使用 XML 元素来分隔每个值,从工作表中的第 1 行获取字段名称。因此,对名称的限制是对 XML 元素名称的限制。 XML.com 上有一篇关于它的文章 here .
至于他们用来将各种标题单元格值转换为有效的 XML 元素名称的确切算法,我从未见过 Google 对此进行了详细说明(尽管人们之前已经要求澄清)。然而,人们可能会想象它是这样的:
foreach char in cell.value {
if (isAllowed(char)) {
name += char;
}
}
return name;
当然,它们确实倾向于省略 空格(例如)而不是将它们(这很合理)转换为下划线。
现在关于 ASCII 集之外的字符......
如果您的 í 是“带尖音符号的拉丁文小写字母 I”,那么它的 Unicode 代码点是 U+00ED,并且它在 XML 中写为 í。因此,它是 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 用户界面将值放在工作表的标题行中,然后执行列表提要的 GET,以查看 XML 的实际结果。 (但我希望您到目前为止一直在实验中使用它)。
祝你好运。
关于python - 通过标题名称访问 Google 电子表格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13546265/