Mi secuencia de comandos actual pega bien los valores, pero los pega en la fila desde la coordenada de datos y lo necesito para pegar la columna. ¿Cómo puedo hacer eso?
Datos de ejemplo: coche, gato, murciélago, rata
Cómo está saliendo:
| Car | cat | bat | rat |Cómo debe salir:
Car | ___ cat | ___ bat | ___ rat |Fragmento de código de ejemplo:
var gridCoordinate = Sheets.newGridCoordinate() gridCoordinate.sheetID = sheet.getSheetID() gridCoordinate.rowIndex = "1" gridCoordinate.columnIndex = "1" let pasteRequest = Sheets.newPasteDataRequest() pasteRequest.data = inputValues pasteRequest.type = SpreadsheetApp.CopyPasteType.PASTE_VALUES pasteRequest.coordinate = gridCoordinate pasteRequest.delimiter = "," let requests = [Sheets.newRequest()] requests[0].pasteData = pasteRequest; let batchUpdateRequest = Sheets.newBatchUpdateSpreadsheetRequest(); batchUpdateRequest.requests = requests var result = Sheets.Spreadsheets.batchUpdate(batchUpdateRequest, "REDACTED") Logger.log(result)Editar para agregar: inputValues tiene que ser una cadena delimitada por comas según la documentación en PasteDataRequests
No especifica cómo se crea la matriz, pero suponiendo que es una matriz 1D ["Coche", "gato", "murciélago", "rata"], debe transformarse en una matriz 2D usando testArray() [["Car "], ["gato"], ["murciélago"], ["rata"]].
Si es una cadena como un csv, pruebe testString() donde cada fila está separada por una nueva línea \n y cada celda por una coma.
Código.gs
function testArray() { try { let a = ["Car", "cat", "bat", "rat"]; let b = a.map( c => [c] ); console.log(a); console.log(b); } catch(err) { console.log(err); } } function testString() { try { let a = "Car\ncat\nbat\nrat"; let b = Utilities.parseCsv(a); console.log(b); } catch(err) { console.log(err); } }Registro de ejecución
9:21:32 AM Notice Execution started 9:21:32 AM Info [ 'Car', 'cat', 'bat', 'rat' ] 9:21:32 AM Info [ [ 'Car' ], [ 'cat' ], [ 'bat' ], [ 'rat' ] ] 9:21:32 AM Notice Execution completed 3:12:37 PM Notice Execution started 3:12:38 PM Info [ [ 'Car' ], [ 'cat' ], [ 'bat' ], [ 'rat' ] ] 3:12:38 PM Notice Execution completedDe There is not more than 2 rows. I gave the expected output in my original question. , supone que cuando su valor de muestra es Car, cat, bat, rat , para lograr su objetivo, ¿qué tal la siguiente modificación?
What is sheet of sheet.getSheetID()? , dijiste var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1") . En este caso, sheet.getSheetID() genera un error porque getSheetID debería ser getSheetId . Y también, se produce un error en gridCoordinate.sheetID . Porque, en este caso, se requiere que gridCoordinate.sheetID sea gridCoordinate.sheetId .Car, cat, bat, rat en una columna usando su script, se usa replace(/,/g, "\n") .Cuando estos puntos se reflejan en su guión, se convierte en lo siguiente.
var inputValues = "Car, cat, bat, rat"; // This sample value is from your question. var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // This is from your reply. var gridCoordinate = Sheets.newGridCoordinate(); gridCoordinate.sheetId = sheet.getSheetId(); // Modified gridCoordinate.rowIndex = "1"; gridCoordinate.columnIndex = "1"; let pasteRequest = Sheets.newPasteDataRequest(); pasteRequest.data = inputValues.replace(/,/g, "\n"); // Modified pasteRequest.type = SpreadsheetApp.CopyPasteType.PASTE_VALUES; pasteRequest.coordinate = gridCoordinate; pasteRequest.delimiter = ","; let requests = [Sheets.newRequest()]; requests[0].pasteData = pasteRequest; let batchUpdateRequest = Sheets.newBatchUpdateSpreadsheetRequest(); batchUpdateRequest.requests = requests; var result = Sheets.Spreadsheets.batchUpdate(batchUpdateRequest, "REDACTED"); Logger.log(result)Car, cat, bat, rat se colocan en las celdas "B2:B5" de la hoja activa.En su situación, cuando quiera usar Sheets API, pensé que también podría usar el siguiente ejemplo.
Sheets.Spreadsheets.Values.update({ values: Utilities.parseCsv(inputValues), majorDimension: "COLUMNS" }, "REDACTED", "Sheet1!B2", { valueInputOption: "USER_ENTERED" });