2016-09-29 10 views
0

このコードでは、Googleスプレッドシートで一連の行を更新しました。 リクエストはうまくいって、下にupdatedRangeを返します。GoogleスプレッドシートAPI - 挿入された値の書式設定

result = service.spreadsheets().values().append(
    spreadsheetId=spreadsheetId, 
    range=rangeName, 
    valueInputOption="RAW", 
    insertDataOption="INSERT_ROWS", 
    body=body 
).execute() 
print(result) 
print("Range updated") 
updateRange = result['updates']['updatedRange'] 

今私は、フォーマットを設定したり、保護された範囲を設定するためのbatchUpdate要求をしたいだろうが、これらのAPIはそうでstartRowIndexendRowIndexとして指定された範囲が必要です。

updatedRangeから行インデックスを取得するにはどうすればよいですか?

+0

'updatedRange'から行/列インデックスを取得する方法があるかどうかはわかりません。私が提案できるのは、 'updatedRange'値に基づいて行と列を数える関数を作成することです。ドキュメント:[スプレッドシートの更新](https://developers.google.com/sheets/guides/batchupdate)に「同じ結果を達成するためのさまざまな方法があります」と述べています。しかし、この機能が役立つと思われる場合は、[こちら](https://code.google.com/a/google.com/p/apps-api-issues/issues/entry?template=Feature% 20request&labels =タイプエンハンスメント、API-タスク)。 –

答えて

0

ネイティブまたはそれ以上の回答を待って、namedRangegridRangeに翻訳するために作成した関数を投稿します。 機能は完璧にはほど遠いとシートIDにシート名を変換しません(私は別の特定の機能にそのタスクを左)が、フォームに名前付き範囲を受け入れる:

  • sheet!A:B
  • sheet!A1:B
  • をここ
  • sheet!A:B5
  • sheet!A1:B5

コードであります

import re 

    def namedRange2Grid(self, rangeName): 
     ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
     match = re.match(".*?\!([A-Z0-9]+)\:([A-Z0-9]+)", rangeName) 
     if match: 
      start = match.group(1) 
      end = match.group(2) 
      matchStart = re.match("([A-Z]{1,})([1-9]+){0,}", start) 
      matchEnd = re.match("([A-Z]{1,})([1-9]+){0,}", end) 
      if matchStart and matchEnd: 
       GridRange = {} 
       letterStart = matchStart.group(1) 
       letterEnd = matchEnd.group(1) 
       if matchStart.group(2): 
        numberStart = int(matchStart.group(2)) 
        GridRange['startRowIndex'] = numberStart - 1 
       if matchEnd.group(2): 
        numberEnd = int(matchEnd.group(2)) 
        GridRange['endRowIndex'] = numberEnd 

       i = 0 
       for l in range(0, len(letterStart)): 
        i = i + (l * len(ascii_uppercase)) 
        i = i + ascii_uppercase.index(letterStart[l]) 
       GridRange['startColumnIndex'] = i 

       i = 0 
       for l in range(0, len(letterEnd)): 
        i = i + (l * len(ascii_uppercase)) 
        i = i + ascii_uppercase.index(letterEnd[l]) 
       GridRange['endColumnIndex'] = i + 1 

       return GridRange 
関連する問題