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

Google Sheets与App Script:使用函数汇总多组数值

问题描述

我制作了一个新的测试表格,其中包含预期结果和当前代码运行的实际结果。我已尽力编写代码,但最终效果不佳。

核心需求

将空白Trans对应的Quantity、Price、Disc数值汇总到对应Trans条目下。注意:请忽略与本问题无关的变量/参数"Category"。

现有AppsScript代码
var RemoveDupV1 = "";
var RemoveDubVV1 = "";
var Time2List = [];
var Trans2List = [];
var RemoveDupV2 = "";
var RemoveDupV3 = "";
var RemoveDupV4 = 0;
var RemoveDupV5 = 0;
var RemoveDupV6 = 0;

function RemoveDup1(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) {
  if(Trans1.localeCompare(Trans2) == 0){
    if(Time1.localeCompare(Time2) == 0){
      RemoveDup2V1(Trans2, Time2);
      PropertiesService.getScriptProperties().setProperty('myArray', Trans2);
      return(Trans1);
    }else{
      return(Trans1)
    }
  }else{
    return(Trans1)
  }
}

function RDR1(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){
  RemoveDupV1 = RemoveDup1(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2);
  return(RemoveDupV1)
}

function RemoveDup2V1(Trans2,Time2) {
  Trans2List.push(Trans2);
  Time2List.push(Time2);
}


// Time
function RemoveDup2(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) {
  if(Trans1.localeCompare(Trans2) == 0){
    if(Time1.localeCompare(Time2) == 0){
      return(Time1);
    }else{
      return(Time1)
    }
  }else{
    return(Time1)
  }
}

function RDR2(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){
  RemoveDupV2 = RemoveDup2(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2);
  return(RemoveDupV2)
}



// Category
function RemoveDup3(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) {
  if(Trans1.localeCompare(Trans2) == 0){
    if(Time1.localeCompare(Time2) == 0){
      return(Category);
    }else{
      return(Category)
    }
  }else{
    return(Category)
  }
}

function RDR3(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){
  RemoveDupV3 = RemoveDup3(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2);
  return(RemoveDupV3)
}



// Quantity
function RemoveDup4(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) {
  if(Trans1.localeCompare(Trans2) == 0){
    if(Time1.localeCompare(Time2) == 0){
      return(Quantity1 + Quantity2);
    }else{
      return(Quantity1)
    }
  }else{
    return(Quantity1)
  }
}

function RDR4(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){
  RemoveDupV4 = RemoveDup4(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2);
  return(RemoveDupV4)
}



// Disc
function RemoveDup5(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) {
  if(Trans1.localeCompare(Trans2) == 0){
    if(Time1.localeCompare(Time2) == 0){
      return(Disc1 + Disc2);
    }else{
      return(Disc1)
    }
  }else{
    return(Disc1)
  }
}

function RDR5(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){
  RemoveDupV5 = RemoveDup5(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2);
  return(RemoveDupV5)
}



// Price
function RemoveDup6(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2) {
  if(Trans1.localeCompare(Trans2) == 0){
    if(Time1.localeCompare(Time2) == 0){
      return(Price1 + Price2);
    }else{
      return(Price1)
    }
  }else{
    return(Price1)
  }
}

function RDR6(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2){
  RemoveDupV6 = RemoveDup6(Trans1, Trans2, Time1, Time2, Category, Quantity1, Quantity2, Disc1, Disc2, Price1, Price2);
  return(RemoveDupV6)
}


function clean1() {
  var data = SpreadsheetApp.getActive().getActiveSheet().getRange('A2:B11').getDisplayValues();

  var res = data.map((x, i, arr) => {
    try {
      return (x[0] == arr[i + 1][0] && x[1] == arr[i + 1][1]) ? ['', x[1]] : arr[i + 1];
    } catch {
    }
  }).filter(x => x);

  res.unshift(data[0])

  SpreadsheetApp.getActive().getActiveSheet().getRange(2, 7, res.length, res[0].length).setValues(res);
}

function onOpen(e) {
  SpreadsheetApp.getUi()
    .createMenu('Clear Dupes')
    .addItem('Clear all Dupes', 'clean1')
    .addSeparator()
    .addToUi();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:57:13