javascript - Google 脚本将文件大小驱动到电子表格 - 文件迭代器不起作用

标签 javascript arrays google-apps-script google-drive-api google-sheets-api

我正在尝试将 Google 云端硬盘中的所有文件列表放入 Google 电子表格中。我正在使用以下代码:

function driveFileSizes() {
  var userProperties = PropertiesService.getUserProperties();
  var continuationToken = userProperties.getProperty('LOG_ALL_FOLDERS_CONTINUATION_TOKEN');
  var start = new Date();
  var end = new Date();
  var maxTime = 1000*60*4.5; // Max safe time, 4.5 mins
  var file;
  var value=[];
  var values=[];
  var sheet = SpreadsheetApp.getActive().getActiveSheet();
  var lastRow = sheet.getLastRow() +1;

  if (continuationToken == null) {
    var files = DriveApp.getFiles();
  } else {
    var files = DriveApp.continueFileIterator(continuationToken); 
  }

  while (files.hasNext() && end.getTime() - start.getTime() <= maxTime) {
    file = files.next();
    value[1] = file.getSize();
    if(value[1]>0){
      value[0]=file.getName();
      values.push(value);
    }
    end = new Date();
  }

  sheet.getRange(lastRow, 1, values.length, 2).setValues(values);

  if(files.hasNext()){
    var continuationToken = files.getContinuationToken();
    userProperties.setProperty('LOG_ALL_FOLDERS_CONTINUATION_TOKEN', continuationToken); 
  } else {
    // Delete the token
    PropertiesService.getUserProperties().deleteProperty('LOG_ALL_FOLDERS_CONTINUATION_TOKEN');
  }
}

代码运行并将数据存入电子表格,但它只是一遍又一遍(数千次)的同一个文件。

我做错了什么?感觉每个循环都会覆盖整个值数组。

这肯定是我干了什么傻事,但我已经只见树木不见森林了。

最佳答案

问题出在你的循环中:

while (files.hasNext() && end.getTime() - start.getTime() <= maxTime) {
  file = files.next();
  value[1] = file.getSize();
  if (value[1] > 0) {
    value[0] = file.getName();
    values.push(value);
  }
  end = new Date();
}

您在循环中存储相同的对象value,并分配给它的属性(而不是它本身)。因为您的输出充满了相同的对象,所以所有引用都会一起更新。

您可以通过每次推送一个新对象来避免这种情况:

var fs = file.getSize();
if (fs > 0) {
  values.push([file.getName(), fs]);
}

如果您愿意,您可以在循环外部声明 fs 变量,并且仍然可以正确使用它,因为整个对象被分配给它,而不是它的属性。

关于javascript - Google 脚本将文件大小驱动到电子表格 - 文件迭代器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275243/

相关文章:

python - 使用 fromfunction 和数组填充 numpy 矩阵

javascript - 带有 materializecss 的动态菜单

javascript - 如果手动切换翻转开关,如何仅触发事件

javascript - 捕获“赞”按钮的点击事件

javascript 如何填充数组值的返回值

javascript - 子类化 JavaScript 数组 - 构造函数参数未传递给数组

google-apps-script - 跟踪帐户的 Google Apps 脚本的总执行时间

javascript - 从 JSON 结构中删除行标题

javascript - 在 javascript 中单击选项卡时仅加载 jsp 选项卡内容?

google-apps-script - 为 Google Apps Script webapp 存储资源(图标、图像等)的优雅方式