Google表格数组clearcontent

伊万·辛尼加利亚(Ivan Sinigaglia)

我有许多Google工作表,分为特定的文件夹。我的文件夹有十张纸。每个工作表都有12个电子表格。他们都是一样的。我需要擦除所有相同范围的所有电子表格的特定单元格并将值设置为其他值,并且我只能使用12个电子表格中的数组代码来完成此操作。我需要的是为文件夹运行的数组代码,这是一种运行我的代码并同时完成120个电子表格的所有工作的方式。

我试图增强此代码,但是它不起作用,当我运行此代码时,什么也没有发生,也没有错误消息。

function apagarTUTMOD2(){
  var folder = DriveApp.getFolderById("folder ID");
  var p = folder.getFiles();
for (i in p){
var sheet = p[i].getSheets();
  for(j in sheet) {
  sheet[j].getRange('F5:F164').clearContent(); //clear this range
  sheet[j].getRange('F105:F164').setValue("X") // write "X" into this range
  }
}
}

我认为有关文件夹的信息有误,但我不知道如何解决。谢谢你的帮助。

Tanaike

我相信您的目标如下。

  • 您要从特定文件夹中检索Google Spreadsheets。
  • Google电子表格有120个,每个电子表格有12个工作表。
  • 您想清除所有工作表中的范围“ F5:F164”。
  • 您要X在所有工作表中将值设置为“ F105:F164”范围。
  • 您想使用Google Apps脚本来实现。

修改要点:

  • 在脚本中,folder.getFiles()返回FileIterator。在这种情况下,next()方法用于检索文件对象。
  • “ for in”的过程成本比forEach高一点。参考
  • 为了将FileIterator中的文件对象与Spreadsheet服务一起使用,可以使用SpreadsheetApp.open()

当以上几点反映到您的脚本时,它将变为以下内容。

修改脚本1:

function apagarTUTMOD2() {
  var folder = DriveApp.getFolderById("folder ID");
  var p = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (p.hasNext()) {
    SpreadsheetApp.open(p.next()).getSheets().forEach(sheet => {
      sheet.getRange('F5:F164').clearContent(); //clear this range
      sheet.getRange('F105:F164').setValue("X") // write "X" into this range
    });
  }
}

修改后的脚本2:

从开始a way to run my code and do all the work for the 120 spreadsheets at once.,我担心上面的脚本一次运行是否可以直接用于您的实际情况。因此,在这个答案中,我还要提出以下脚本。以下脚本使用Sheets API和Drive API。使用这些API时,将可以降低处理成本。

使用此脚本之前,请在Advanced Google服务中启用Sheets API和Drive API

function apagarTUTMOD2_2() {
  const folderId = "folder ID";  // Please set the folder ID.

  const files = Drive.Files.list({maxResults: 1000, q: `'${folderId}' in parents and trashed=false and mimeType='${MimeType.GOOGLE_SHEETS}'`}).items;
  files.forEach(({id}) => {
    const sheetIds = Sheets.Spreadsheets.get(id, {fields: "sheets(properties(sheetId))"}).sheets;
    sheetIds[0].properties.sheetId
    const requests = sheetIds.flatMap(o => [
      {repeatCell:{range:{sheetId:o.properties.sheetId,startRowIndex:4,endRowIndex:164,startColumnIndex:5,endColumnIndex:6},cell:{userEnteredValue:{}},fields:"userEnteredValue"}},
      {repeatCell:{range:{sheetId:o.properties.sheetId,startRowIndex:104,endRowIndex:164,startColumnIndex:5,endColumnIndex:6},cell:{userEnteredValue:{stringValue:"X"}},fields:"userEnteredValue"}}
    ]);
    Sheets.Spreadsheets.batchUpdate({requests: requests}, id);
  });
}

参考:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章