Actualizar el formato de una sola fila para toda la hoja

Solo quiero aplicar un formato desde una entrada JSON. Lo primero que hice fue hacer mi formato deseable en mi hoja de cálculo para la segunda fila de todas las columnas. Luego los .get con una solicitud .get (de A2 a AO3).

 request = google_api.service.spreadsheets().get( spreadsheetId=ss_id, ranges="Tab1!A2:AO3", includeGridData=True).execute() 

Lo siguiente que hice fue recostackr cada uno de los formatos para cada columna y registrarlos en un diccionario.

 my_dictionary_of_formats = {} row_values = row_1['sheets'][0]['data'][0]['rowData'][0]['values'] for column in range(0, len(row_values)): my_dictionary_of_formats[column] = row_values[column]['effectiveFormat'] 

Ahora tengo una lista de todos mis formatos efectivos para todas mis columnas. Ahora tengo problemas para aplicar ese formato a todas las filas de cada columna. He intentado una solicitud batchUpdate :

 cell_data = { "effectiveFormat": my_dictionary_of_formats[0]} row_data = { "values": [ cell_data ] } update_cell = { "rows": [ row_data ], "fields": "*", "range": { "sheetId": input_master.tab_id, "startRowIndex": 2, "startColumnIndex": 0, "endColumnsIndex": 1 } } request_body = { "requests": [ {"updateCells": update_cell}], "includeSpreadsheetInResponse": True, "responseIncludeGridData": True} service.spreadsheets().batchUpdate(spreadsheetId=my_id, body=request_body).execute() 

Esto acabó con todo y no estoy seguro de por qué. No creo que entienda los fields='* atributo.

TL; DR Quiero aplicar un formato a todas las filas en una sola columna. Al igual que si usé la herramienta “Formato de pintura” en la segunda fila, la primera columna y la arrastré hasta la última fila.

—–Actualizar

Hola, gracias a los comentarios esta fue mi solución:

 ###collect all formats from second row import json row_2 = goolge_api.service.spreadsheets().get( spreadsheetId=spreadsheet_id, ranges="tab1!A2:AO2", includeGridData=True).execute() my_dictionary = {} row_values = row_2['sheets'][0]['data'][0]['rowData'][0]['values'] for column in range(0,len(row_values)): my_dictionary[column] = row_values[column] json.dumps(my_dictionary,open('config/format.json','w')) ###Part 2, apply formats requests = [] my_dict = json.load(open('config/format.json')) for column in my_dict: requests.append( { "repeatCell": { "range": { "sheetId": tab_id, "startRowIndex": str(1), "startColumnIndex":str(column), "endColumnIndex":str(int(column)+1) }, "cell": { "userEnteredFormat": my_dict[column] }, 'fields': "userEnteredFormat({})".format(",".join(my_dict[column].keys())) } }) body = {"requests": requests} google_api.service.spreadsheets().batchUpdate(spreadsheetId=s.spreadsheet_id,body=body).execute() 

Cuando incluye fields como parte de la solicitud, indica al punto final de la API que debe sobrescribir los campos especificados en el rango de destino con la información que se encuentra en su recurso cargado. fields="*" se interpreta de manera correspondiente como “Esta solicitud especifica todos los datos y metadatos del rango dado. Elimine los datos y metadatos anteriores del rango y use lo que se suministra en su lugar”.

Por lo tanto, todo lo que no esté especificado en sus solicitudes de updateCells se eliminará del range suministrado en la solicitud (por ejemplo, valores, fórmulas, validación de datos, etc.).

Puedes aprender más en la guía de batchUpdate

Para una solicitud de updateCell , el parámetro de los fields es como se describe:

Los campos de CellData que deben actualizarse. Se debe especificar al menos un campo. La raíz es el CellData ; ‘row.values’. No debe especificarse. Se puede usar un solo “*” como mano corta para enumerar todos los campos.

Si luego ve la descripción del recurso de CellData , observe los siguientes campos:

  • “userEnteredValue”
  • “Valor efectivo”
  • “formattedValue”
  • “userEnteredFormat”
  • “formato efectivo”
  • “hiperenlace”
  • “Nota”
  • “textFormatRuns”
  • “validación de datos”
  • “tabla dinámica”

Por lo tanto, es probable que la especificación de campos adecuada para su solicitud sea fields="effectiveFormat" row_data fields="effectiveFormat" , ya que este es el único campo que proporciona en su propiedad row_data .

Considere también usar la solicitud repeatCell si solo está especificando un formato único.