2

谷歌電子表格API現在讓你使用的頭名行添加到電子表格中,這個過程被描述here訪問谷歌電子表格數據

文檔但是隻是給出其中的標題文字是否做了簡單的情況的一個例子的小寫文本(或符合表達式[a-z0-9]的文本)。

我的應用程序要求我能夠爲文本設置任意標題名稱(即那些不一定適合上述表達式的文本)。經過多次試驗,我已經想通了,特殊字符和符號(除期)一般不支持。訪問使用包含特殊字符標題行電子表格,其中移除了特殊字符的標題文字,必須使用。

這些轉換不是documented,我發現它們大多是通過試驗和錯誤。

例如,要通過API訪問標題爲'Foo Bar'的列,需要將標題文本轉換爲'foobar'。同樣,'Foo.Bar'變得'foo.bar'

一些特殊字符,也有被淘汰,但我不斷收到角落的情況在我的代碼。

需要對實際標題文本進行哪些轉換才能通過API訪問它?

也爲此spreadsheet標題文本'País''país'的轉換似乎不起作用。我懷疑它與非ASCII字符有關'í'

任何建議將不勝感激。

+0

請說出你的問題。這有點混亂。 – user618677

回答

2

您必須記住使用'列表訂閱'時,它使用XML元素來分隔每個值,從表格中的行1中取出字段的名稱。因此,名稱上的限制是XML元素名稱上的限制。有一個關於它here上XML.com的文章。對於他們用於將各種標題單元格值轉換爲有效的XML元素名稱的確切算法,我從來沒有見過谷歌指出這一點(即使人們現在要求澄清)。然而,人們可能想象它是這樣的:

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

當然,他們往往不是將它們轉換(如將是相當合理的),以一個下劃線省略空間(例如)。

現在談談ASCII字符集之外的字符...

如果你的I是「拉丁小寫的i急性」,那麼它的Unicode代碼點爲U + 00ED,它的XML編寫的土地作爲& #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實際結果如何。 (但我希望你到目前爲止在你的實驗中一直在使用這個)。

祝你好運。

+0

感謝您的建議。迄今爲止,我一直在使用python客戶端進行實驗。我有一個類似於你所描述的算法,我不斷改變我遇到的任何角落案例。然而,我很驚訝Unicode字符U + 00ED似乎不被允許。也許這與表示有關。我試圖看看是否是這種情況。 –