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

到期日进度条开发求助:实现百分比/状态展示替代小数数值

Google Sheets到期日进度条/状态脚本修复方案

原脚本仅输出原始小数数值,且写入B列而非需求的D列,以下提供两种修改方案:

方案一:显示百分比进度条(带可视化数据条)

修改后脚本会输出百分比格式数值,并添加数据条直观展示进度:

function updateProgress() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var dueDates = sheet.getRange(2, 1, lastRow - 1, 1).getValues();
  var progressValues = [];
  var today = new Date();

  for (var i = 0; i < dueDates.length; i++) {
    var dueDate = new Date(dueDates[i][0]);
    var timeDiff = dueDate.getTime() - today.getTime();
    var daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
    // 计算0-1区间的进度值:逾期则为1(100%),30天内按剩余天数占比计算
    var progress = daysDiff <= 0 ? 1 : Math.max(0, 1 - (daysDiff / 30));
    progressValues.push([progress]);
  }

  // 写入D列并设置百分比格式
  var targetRange = sheet.getRange(2, 4, progressValues.length, 1);
  targetRange.setValues(progressValues).setNumberFormat("0%");
  
  // 添加绿色渐变数据条(可选,增强可视化)
  var rule = SpreadsheetApp.newConditionalFormatRule()
    .setGradientMinMax()
    .setMinValue(0)
    .setMaxValue(1)
    .setMinColor("#ffffff")
    .setMaxColor("#4CAF50")
    .setRanges([targetRange])
    .build();
  var rules = sheet.getConditionalFormatRules();
  rules.push(rule);
  sheet.setConditionalFormatRules(rules);
}
  • 进度值转换为0-1的小数,设置百分比格式后自动显示为XX%
  • 数据条会随进度占比填充颜色,逾期时满条显示绿色
  • 已修正写入目标列为D列(第4列)

方案二:显示状态文本(GOOD/SLIGHTLY GOOD/NOT GOOD)

直接根据剩余天数输出对应状态文本:

function updateProgress() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var dueDates = sheet.getRange(2, 1, lastRow - 1, 1).getValues();
  var statusList = [];
  var today = new Date();

  for (var i = 0; i < dueDates.length; i++) {
    var dueDate = new Date(dueDates[i][0]);
    var timeDiff = dueDate.getTime() - today.getTime();
    var daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
    var status;
    // 可根据需求调整天数阈值
    if (daysDiff > 15) {
      status = "GOOD";
    } else if (daysDiff > 0) {
      status = "SLIGHTLY GOOD";
    } else {
      status = "NOT GOOD";
    }
    statusList.push([status]);
  }

  // 写入D列
  sheet.getRange(2, 4, statusList.length, 1).setValues(statusList);
}
  • 剩余天数大于15天显示GOOD,1-15天显示SLIGHTLY GOOD,逾期或当天显示NOT GOOD
  • 可自行修改代码中的天数阈值,适配不同需求

内容的提问来源于stack exchange,提问作者Gilbert Norris Frejoles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:28:14