2014-07-30 9 views
5

का उपयोग करके Google स्प्रेडशीट में एकाधिक पंक्तियां जोड़ें मुझे Google स्प्रेडशीट में एकाधिक (कुछ सैकड़ों) पंक्तियों को जोड़ने की आवश्यकता है। वर्तमान में मैं इसे लूप में कर रहा हूं:एपीआई

for row in rows 
    _api_client.InsertRow(row, _spreadsheet_key, _worksheet_id) 

जो बहुत धीमी है, क्योंकि पंक्तियों को एक-एक करके जोड़ा जाता है।

क्या इसे गति देने का कोई तरीका है?

+1

एपीआई में "बैच अपडेट" है, मैंने इसे जावा के साथ उपयोग किया है, लेकिन पायथन संस्करण को नहीं देखा है। – eddyparkinson

उत्तर

6

ठीक है, मैंने अंत में बैच अनुरोध का उपयोग किया। विचार एक एपीआई अनुरोध में कई बदलाव भेजने के लिए है।

सबसे पहले, मैं शब्दकोशों की एक सूची है, जो पंक्ति R और स्तंभ C पर सेल का मान प्राप्त करने के लिए rows_map[R][C] की तरह इस्तेमाल किया जाएगा बनाया।

rows_map = [ 
    { 
     1: row['first_column'] 
     2: row['second'] 
     3: row['and_last'] 
    } 
    for row i rows 
] 

तब मैं कार्यपत्रक

query = gdata.spreadsheet.service.CellQuery() 
query.return_empty = 'true' 

cells = _api_client.GetCellsFeed(self._key, wksht_id=self._raw_events_worksheet_id, query=query) 

से सभी कोशिकाओं मिल और एक समय में एकाधिक कोशिकाओं को संशोधित करने के बैच अनुरोध पैदा करते हैं।

batch_request = gdata.spreadsheet.SpreadsheetsCellsFeed() 

तब मैं संशोधित कर सकते हैं (या मेरे मामले में सभी मूल्यों को फिर से लिखने) स्प्रेडशीट।

for cell_entry in cells.entry: 
    row = int(cell_entry.cell.row) - 2 
    col = int(cell_entry.cell.col) 

    if 0 <= row < len(events_map): 
     cell_entry.cell.inputValue = rows_map[row][col] 
    else: 
     cell_entry.cell.inputValue = '' 

    batch_request.AddUpdate(cell_entry) 

और केवल एक अनुरोध में सभी परिवर्तनों भेजें:

_api_client.ExecuteBatch(batch_request, cells.GetBatchLink().href) 

नोट:

बैच अनुरोध केवल सेल प्रश्नों के साथ संभव हो रहे हैं। सूची प्रश्नों के साथ उपयोग करने के लिए ऐसी कोई व्यवस्था नहीं है।

query.return_empty = 'true' अनिवार्य है। अन्यथा एपीआई केवल उन कोशिकाओं को वापस कर देगा जो खाली नहीं हैं।