My current script pastes the values just fine but it pastes them across the row from the data coordinate and I need it to paste down the column. How do I do that?
Example data: Car, cat, bat, rat
How it’s outputting:
| Car | cat | bat | rat |
How it needs to be output:
Car |
___
cat |
___
bat |
___
rat |
Example code snippet:
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)
Edit to add: inputValues has to be a comma delimited string per the documentation on PasteDataRequests
CodePudding user response:
You don't specify how the array is created but assuming its a 1D array ["Car", "cat", "bat", "rat"] it needs to be transformed into a 2D array using testArray() [["Car"], ["cat"], ["bat"], ["rat"]].
If its a string like a csv try testString() where each row is seperated by a new line \n and each cell by a comma.
Code.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);
}
}
Execution log
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 completed
CodePudding user response:
From There is not more than 2 rows. I gave the expected output in my original question., it supposes that when your sample value is Car, cat, bat, rat, in order to achieve your goal, how about the following modification?
Modification points:
- When I asked
What is sheet of sheet.getSheetID()?, you saidvar sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"). In this case,sheet.getSheetID()occurs an error becausegetSheetIDshould begetSheetId. And also, an error occurs atgridCoordinate.sheetID. Becuase, in this case,gridCoordinate.sheetIDis required to begridCoordinate.sheetId. - In order to put
Car, cat, bat, ratto a column using your script,replace(/,/g, "\n")is used.
When these points are reflected to your script, it becomes as follows.
Modified script:
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)
- When this script is run, the values of
Car, cat, bat, ratare put to the cells "B2:B5" of the active sheet.
Note:
In your situation, when you want to use Sheets API, I thought that you also might be able to use the following sample.
Sheets.Spreadsheets.Values.update({ values: Utilities.parseCsv(inputValues), majorDimension: "COLUMNS" }, "REDACTED", "Sheet1!B2", { valueInputOption: "USER_ENTERED" });
