You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Sheets单元格中写入文件处理进度

解决Google Apps Script进度写入“PROGRESS”列问题

修改后的代码

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('开始处理文件', 'showAlert')
      .addToUi();
}

function showAlert() {
  var ui = SpreadsheetApp.getUi();
  var result = ui.alert(
     '确认操作',
     '确定要开始下载并重命名文件吗?',
      ui.ButtonSet.YES_NO);

  if (result == ui.Button.YES){
    let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    let lastRow = sheet.getLastRow();
    // 找到"PROGRESS"列的索引
    let headerRow = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    let progressCol = headerRow.indexOf("PROGRESS") + 1; // 列索引从1开始
    
    if (progressCol === 0) {
      ui.alert('未找到"PROGRESS"列,请检查表格表头');
      return;
    }

    // 提前获取目标文件夹,避免循环内重复调用API
    let folder = DriveApp.getFolderById("你的文件夹ID");

    for (let i = 0; i < lastRow - 1; i++) {
      try {
        let rowNum = 2 + i;
        let url = sheet.getRange(rowNum, 1).getValue();
        let name = sheet.getRange(rowNum, 2).getValue();
        
        // 下载文件并重命名保存
        let blob = UrlFetchApp.fetch(url).getBlob();
        folder.createFile(blob).setName(name);
        
        // 写入当前行进度
        sheet.getRange(rowNum, progressCol).setValue("COMPLETED");
        // 立即刷新表格显示进度
        SpreadsheetApp.flush();
      } catch (e) {
        // 捕获错误,标记为失败
        sheet.getRange(2 + i, progressCol).setValue("FAILED: " + e.message);
        SpreadsheetApp.flush();
        ui.alert("第" + (i+1) + "行处理失败:" + e.message);
      }
    }

    // 全部完成后,将所有进度单元格设置为"completed"
    sheet.getRange(2, progressCol, lastRow - 1).setValue("completed");
    SpreadsheetApp.flush();
    ui.alert("所有文件处理完成");
  } else {
    ui.alert('操作已取消');
  }
}

关键修改说明

  • 定位PROGRESS列:通过表头查找列索引,避免硬编码列号,适配表格结构变化
  • 优化API调用:将文件夹获取移到循环外,减少Drive API调用次数,提升效率
  • 实时写入进度:每完成一个文件操作后,立即写入对应行的COMPLETED,并调用SpreadsheetApp.flush()确保表格实时更新
  • 错误处理:增加try-catch捕获异常,标记失败行并提示错误信息
  • 批量更新最终状态:全部处理完成后,批量将所有进度单元格设置为completed
  • 移除冗余弹窗:删除循环内的弹窗,改为仅在开始、错误、结束时提示,避免流程中断

内容的提问来源于stack exchange,提问作者Zeeshan Hasnain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:55:12