应用脚本新的 Google 表格创建问题

用户18871432

我正在尝试编写一个应用程序脚本,该脚本从多个不同的电子表格(完全独立的文档)中获取字符串数据并将它们全部放入一个新的电子表格中。当我运行记录器时,它会显示我想要的所有数据。我希望每条数据都显示在 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);
     
}
}

}
Tanaike

我相信你的目标如下。

  • 您想从特定文件夹下每个电子表格的“B”列中检索值。
  • 您想将检索到的值放入目标工作表的“A”列。

修改点:

  • 关于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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章