Estoy usando la API de hojas de cálculo de Google con nodejs para insertar una fila en la segunda fila de uno de los archivos. Entonces, mi idea era crear una fila vacía en la fila 2 y luego agregar nuevos valores de fila.
El problema es que quiero cambiar todas las filas además de la primera y agregar una nueva fila vacía en la segunda fila manteniendo todos los datos y luego agregando los nuevos datos obtenidos a la nueva fila vacía creada.
Cuando ejecuto ambas solicitudes de la siguiente manera:
let range = "MySheetName!A2"; let rowArr = [ [1,2,3,4,5,6,7,8], ]; this.insertSecondRowBlank(); this.exeGoogleBatchUpdate() .then( this.updateRowsOnSpreadsheet(range, rowArr) );la fila con valores se agrega en la parte superior de la fila 2, por lo que está eliminando los datos que existen allí, y luego está cambiando y agregando la fila en blanco, y lo que quiero es lo contrario. Quiero mantener los datos en la fila 2 y simplemente cambiar todas las filas además de la fila 1 y luego agregar la nueva fila en una fila en blanco que se acaba de crear.
Las funciones utilizadas aquí:
async updateRowsOnSpreadsheet(range, rowArr){ const googleSpreadSheet = await this.getSheetInstance(); const spreadSheetValues = googleSpreadSheet.spreadsheets.values; const updateRows = spreadSheetValues.update({ auth: await this.getAuth(), spreadsheetId:this.fileID, range: range, valueInputOption: "RAW", resource:{ values: rowArr, } }); } async insertSecondRowBlank(sheetID = "0"){ let singleRequest = { insertDimension : { range : { sheetId : sheetID, dimension : "ROWS", startIndex : 1, endIndex : 2, }, inheritFromBefore : false, } }; this.requests.push(singleRequest); } async exeGoogleBatchUpdate(){ let requests = this.requests; const batchUpdateRequest = {requests:requests}; const sheets = await this.getSheetInstance(); sheets.spreadsheets.batchUpdate({ spreadsheetId:this.fileID, resource: batchUpdateRequest, },(err, response) => { if (err) { } else { } }); } ¿Qué debo hacer para que Google acepte primero la primera solicitud y luego acepte la segunda solicitud en orden? Porque cuando envío, ejecuta primero updateRowsOnSpreadsheet y luego ejecuta insertSecondRowBlank incluso si el pedido que envío es el opuesto.
Creo que los métodos de googleapis para Node.js devuelven Promise. En su situación, ¿qué tal la siguiente modificación?
async updateRowsOnSpreadsheet(range, rowArr) { const googleSpreadSheet = await this.getSheetInstance(); const spreadSheetValues = googleSpreadSheet.spreadsheets.values; const updateRows = await spreadSheetValues.update({ auth: await this.getAuth(), spreadsheetId: this.fileID, range: range, valueInputOption: "RAW", resource: { values: rowArr, }, }); return updateRows; } insertSecondRowBlank(sheetID = "0") { let singleRequest = { insertDimension: { range: { sheetId: sheetID, dimension: "ROWS", startIndex: 1, endIndex: 2, }, inheritFromBefore: false, }, }; this.requests.push(singleRequest); } async exeGoogleBatchUpdate() { let requests = this.requests; const batchUpdateRequest = { requests: requests }; const sheets = await this.getSheetInstance(); const res = await sheets.spreadsheets.batchUpdate({ spreadsheetId: this.fileID, resource: batchUpdateRequest, }); return res; }En la secuencia de comandos modificada anterior, modifique la secuencia de comandos para ejecutar estas funciones de la siguiente manera.
// Please modify the function name from `run` to your actual function name. async run() { // Please declare "sheetName". let range = sheetName + "!A2"; let rowArr = [[1, 2, 3, 4, 5, 6, 7, 8]]; this.insertSecondRowBlank(); const res1 = await this.exeGoogleBatchUpdate(); const res2 = await this.updateRowsOnSpreadsheet(range, rowArr); console.log(res1.data); console.log(res2.data); }rowArr se colocó en la nueva fila insertada.exeGoogleBatchUpdate() , pensé que en su secuencia de comandos, auth: await this.getAuth() en updateRowsOnSpreadsheet podría no ser necesario para su uso.