通过标题名称访问Google电子表格数据

时间:2012-11-24 22:25:25

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

Google Spreadsheet API允许您使用标题名称向电子表格添加行,此过程描述为here

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

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

这些转换不是documented,我发现它们主要是经过反复试验。

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

一些特殊字符也必须被淘汰,但我不断在我的代码中获得一些特殊情况。

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

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

有关

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

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

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

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

当然,他们确实倾向于省略空格(例如),而不是将它们(因为非常合理)转换为下划线。

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

如果你的“是”LATIN SMALL LETTER I ACUTE“,那么它的Unicode代码点是U + 00ED,它用XML-land编写为& #xED。因此,它是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)*

如果他们确实有如上所述的算法,那么& #xED应该是'in'。但是,我会密切关注您发送Spreadsheet API的编码,以及它发送给您的编码。我不会把它放在谷歌那里以便在这方面有一个错误。

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

祝你好运。