
[英]Google Apps Script - If Last Column in table, then paste data with new row
[英]Google Apps Script Sheets PasteDataRequest paste to column instead of row?
我当前的脚本可以很好地粘贴值,但是它将它们从数据坐标粘贴到行中,我需要它来粘贴列。 我怎么做?
示例数据:汽车、猫、蝙蝠、老鼠
输出方式:
| Car | cat | bat | rat |
它需要如何输出:
Car |
___
cat |
___
bat |
___
rat |
示例代码片段:
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)
编辑以添加: inputValues 必须是根据 PasteDataRequests 文档的逗号分隔字符串
您没有指定如何创建数组,但假设它是一维数组 ["Car", "cat", "bat", "rat"] 它需要使用 testArray() [["Car "]、["猫"]、["蝙蝠"]、["老鼠"]]。
如果它是像 csv 这样的字符串,请尝试 testString() ,其中每一行由一个新行\n
分隔,每个单元格由一个逗号分隔。
代码.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);
}
}
执行日志
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
从There is not more than 2 rows. I gave the expected output in my original question.
There is not more than 2 rows. I gave the expected output in my original question.
, 假设当你的样本值为Car, cat, bat, rat
时,为了达到你的目的,下面的修改怎么样?
What is sheet of sheet.getSheetID()?
,你说var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
。 在这种情况下, sheet.getSheetID()
发生错误,因为getSheetID
应该是getSheetId
。 而且, gridCoordinate.sheetID
发生错误。 因为在这种情况下, gridCoordinate.sheetID
必须是gridCoordinate.sheetId
。Car, cat, bat, rat
放入一列,请使用replace(/,/g, "\n")
。当这些点反映到你的脚本中时,它变成如下。
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
的值放入活动工作表的单元格“B2:B5”中。在您的情况下,当您想使用 Sheets API 时,我认为您也可以使用以下示例。
Sheets.Spreadsheets.Values.update({ values: Utilities.parseCsv(inputValues), majorDimension: "COLUMNS" }, "REDACTED", "Sheet1!B2", { valueInputOption: "USER_ENTERED" });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.