我正在尝试编写一个应用程序脚本,该脚本从多个不同的电子表格(完全独立的文档)中获取字符串数据并将它们全部放入一个新的电子表格中。当我运行记录器时,它会显示我想要的所有数据。我希望每条数据都显示在 A 列中,但是当我运行我的脚本时,它只在电子表格中放置 1 个数据点,而不是全部。有人可以给我一些指导吗?这是我的代码:
function pullTogether() {
var files = DriveApp.getFolderById('Folder ID').searchFiles('title != "nothing"');
const rangeName = 'Sheet1!B2:C';
while(files.hasNext()){
var xFile = files.next();
var name = xFile.getId();
const values = Sheets.Spreadsheets.Values.get(name, rangeName).values;
for (const row in values) {
var a1 = (values[row][0]);
Logger.log(a1);
var ss = SpreadsheetApp.openById("ID of new spreadsheet"); //I have the real ID in my code
var cell = ss.getRange("A2");
cell.setValue(a1);
}
}
}
我相信你的目标如下。
关于but when I run my script, it only puts 1 data point in the spreadsheet instead of all of them.
,当我看到你的脚本时,检索到的值总是放在目标工作表的单元格“A2”中。我认为这可能是您的问题的原因。
在您的脚本中,我认为当使用以下流程时,流程成本会变低。通过此流程,您的问题也可以解决。
在您的情况下,即使不使用 Sheets API,脚本也可能使用getValues()
.
当这些点反映在你的脚本中时,它变成如下。
请设置文件夹 ID 和目标电子表格 ID。
function pullTogether() {
// Retrieve values from each Spreadsheet.
var values = [];
var files = DriveApp.getFolderById('Folder ID').searchFiles(`title != 'nothing' and mimeType='${MimeType.GOOGLE_SHEETS}'`);
var sheetName = 'Sheet1'
while (files.hasNext()) {
var xFile = files.next();
var sheet = SpreadsheetApp.open(xFile).getSheetByName(sheetName);
if (sheet) {
var v = sheet.getRange("B2:B" + sheet.getLastRow()).getValues();
values = [...values, ...v];
}
}
// Put values to the destination sheet.
var ss = SpreadsheetApp.openById("ID of new spreadsheet"); //I have the real ID in my code
var dstSheet = ss.getSheets()[0];
dstSheet.getRange(2, 1, values.length, values[0].length).setValues(values);
}
虽然我不确定你的实际情况,但是当上面的脚本在大数据下不起作用时,请进行如下修改。
从
dstSheet.getRange(2, 1, values.length, values[0].length).setValues(values);
至
Sheets.Spreadsheets.Values.update({ values }, ss.getId(), `'${dstSheet.getSheetName()}'!A2`, { valueInputOption: "USER_ENTERED" });
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句