如何在Google Sheets中自动补全缺失日期以生成完整余额图表?
生成Google Sheets全日期余额序列的两种方案(公式+脚本)
一、公式法(无需代码,快速实现)
适合数据量不大、偏好手动操作的场景:
生成完整日期序列
在新工作表(比如命名为「每日余额」)的A2单元格输入公式,自动生成从第一条记录到最后一条记录的所有日期:=SEQUENCE(MAX(Sheet1!A:A)-MIN(Sheet1!A:A)+1,1,MIN(Sheet1!A:A))(把
Sheet1替换成你的原始数据工作表名称)匹配每日余额
在B2单元格输入公式,自动继承上一次交易后的余额(无交易日期沿用前一天余额):=XLOOKUP(A2,Sheet1!A:A,Sheet1!D:D,"",-1)下拉填充整列后,就能得到每个日期对应的余额数据。
二、App Script法(自动化,适合大数据量)
如果需要定期更新或数据量较大,用脚本自动生成更高效:
- 打开Google Sheets的「扩展」→「Apps脚本」,清空默认代码,粘贴以下脚本:
function fillDailyBalance() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName("Sheet1"); // 替换为你的原始表名 const targetSheet = ss.getSheetByName("每日余额") || ss.insertSheet("每日余额"); const data = sourceSheet.getDataRange().getValues(); // 提取有效日期和余额数据 const dateBalancePairs = data.slice(1).filter(row => row[0]) .map(row => [new Date(row[0]), row[3]]); if (dateBalancePairs.length === 0) return; // 确定日期范围 const startDate = new Date(Math.min(...dateBalancePairs.map(p => p[0]))); const endDate = new Date(Math.max(...dateBalancePairs.map(p => p[0]))); // 构建每日余额数组 const result = [["日期", "每日余额"]]; let currentBalance = dateBalancePairs[0][1]; let currentDate = new Date(startDate); while (currentDate <= endDate) { // 检查当日是否有交易记录,更新余额 const dailyRecord = dateBalancePairs.find(p => p[0].toDateString() === currentDate.toDateString() ); if (dailyRecord) currentBalance = dailyRecord[1]; result.push([new Date(currentDate), currentBalance]); currentDate.setDate(currentDate.getDate() + 1); } // 写入目标工作表并格式化 targetSheet.clear(); targetSheet.getRange(1, 1, result.length, result[0].length).setValues(result); targetSheet.getRange(2, 1, result.length - 1, 1).setNumberFormat("yyyy-mm-dd"); } - 修改脚本中的
Sheet1为你的原始数据工作表名称,点击保存并运行,授权后即可在「每日余额」工作表生成全日期余额数据。
三、制作余额趋势图表
不管用哪种方法生成数据后,选中「日期」和「每日余额」列,插入折线图,就能直观看到余额的变化趋势,轻松识别余额稳定的时间段。
内容的提问来源于stack exchange,提问作者Morteza Sabouri
相关产品推荐
相关产品推荐

