3

Google Spreadsheet APIでは、ヘッダー名を使用してスプレッドシートに行を追加できます。このプロセスについては、こちらで説明しています。

ただし、ドキュメントには、ヘッダーテキストが小文字のテキスト(または式[a-z0-9]に適合するテキスト)で構成されている単純なケースの例が示されています。

私のアプリケーションでは、テキストに任意のヘッダー名を設定できる必要があります(つまり、上記の式に必ずしも適合しないもの)。多くの実験を通して、特殊文字と記号(ピリオドを除く)は一般的にサポートされていないことがわかりました。特殊文字を含むヘッダー行を使用するスプレッドシートにアクセスするには、特殊文字が削除されたヘッダーテキストを使用する必要があります。

これらの変換は文書化されておらず、私はほとんど試行錯誤によってそれらを見つけました。

たとえば'Foo Bar'、APIを介してヘッダーのある列にアクセスするには、ヘッダーテキストをに変換する'foobar'必要があります。同様に、に'Foo.Bar' なり'foo.bar'ます。

一部の特殊文字も削除する必要がありますが、コードでコーナーケースが発生し続けています。

APIを介してアクセスするには、実際のヘッダーテキストにどのような変換を行う必要がありますか?

また、このスプレッドシートでは、ヘッダーテキストの'País'への変換が機能して'país'いないようです。非ASCII文字と関係があるのではないかと思います'í'

任意の提案をいただければ幸いです。

4

1 に答える 1

3

「リストフィード」を使用する場合は、XML要素を使用して各値を区切り、シートの行1からフィールドの名前を取得することを覚えておく必要があります。したがって、名前の制限はXML要素名の制限です。XML.comにそれに関する記事があります

さまざまなヘッダーセル値を有効なXML要素名に変換するために使用する正確なアルゴリズムに関しては、Googleがこれを指定しているのを見たことがありません(これまでに説明を求められていたとしても)。ただし、次のようなものだと想像するかもしれません。

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

確かに、スペースをアンダースコアに変換するのではなく(たとえば)スペースを省略する傾向があります。

次に、ASCIIセット以外の文字について...

íが「LATINSMALLLETTERI WITH ACUTE」の場合、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を超えてはいけません。

もちろん、実験を行うこともできます。GoogleAppsのユーザーインターフェースを使用してシートのヘッダー行に値を入力し、リストフィードのGETを実行して、XMLが実際にどのようになるかを確認します。(しかし、これまでの実験でこれを使用していると思います)。

幸運を。

于 2013-02-03T14:07:29.083 に答える