Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何使用新工作表作为输入源将值汇总并排序为日期_Google Apps Script_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google apps script 如何使用新工作表作为输入源将值汇总并排序为日期

Google apps script 如何使用新工作表作为输入源将值汇总并排序为日期,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,我不确定问题的标题是否很清楚,所以我会更好地解释 我有一个电子表格,基本上是一个模板,只用于检查财务数据。即使从原始Excel文件复制了完整信息,脚本也只能处理4个单元格,它们是突出显示的单元格 第一个(C3)是客户的名称。第二个(C9)是付款到期日后的天数,如果是2次或更多付款,则用/拆分。然后,我们在F11上有交货日期,在H25上有总价值 我需要做的每件事都非常简单,甚至可以与Google Calendar集成,根据客户端注册不同的付款。我这里有A26:26中=C9的=split(),下面

我不确定问题的标题是否很清楚,所以我会更好地解释

我有一个电子表格,基本上是一个模板,只用于检查财务数据。即使从原始Excel文件复制了完整信息,脚本也只能处理4个单元格,它们是突出显示的单元格

第一个(
C3
)是客户的名称。第二个(
C9
)是付款到期日后的天数,如果是2次或更多付款,则用
/
拆分。然后,我们在
F11
上有交货日期,在
H25
上有总价值

我需要做的每件事都非常简单,甚至可以与Google Calendar集成,根据客户端注册不同的付款。我这里有
A26:26
=C9
=split()
,下面是交付日期的拆分单元格的总和,以及总金额除以付款计数

然后,我使用
=transpose()
创建了一个新的矩阵,将这些数据正确地发送到我的谷歌日历

也就是说,很明显,我主要是在研究公式和参考文献。我现在似乎不能做的是得到分割后的付款值,并根据发薪日在第二张表中进行排序。我不需要客户的名字或任何东西,只需将不同客户的付款值排序为列(或行,任何更容易完成的),这样我就可以得到当天的总额

我需要的例子

因此,我需要通过某种方式扫描日期,然后向下扫描行以添加它们-就像我已经使用日历一样-但是要汇总当天的总价值,如果出现新订单,总价值可能会发生变化,因此我想使用第二行进行汇总,并从第3行开始将是最好的情况。(另外,请注意,并非所有的值都出现在这里,因为我每天都会一个接一个地出现在表格中,所以在这个例子中,6月5日出现在那里,只是不在屏幕盖中)

预期产量 假设我有上述情况,这四笔付款。如果我有一个新订单,它将在模板上显示如下:

在另一张纸上,它将保留第一个示例中的旧数据,并包括新数据,汇总付款的价值,如下所示:

通过这种方式,可以在上一个数据的下方输入新数据,或者通过创建新行在上面输入新数据。哪一个都不重要

可以用一种静态的方式,也就是说,从不删除已经过去的日子,而是动态地,总是根据
=today()
新日期()更新第一天,我想这样做要复杂得多

编辑 我忘了提到,对于每个订单,都有一个新的电子表格,我将把它复制到这个模板中。具有预期结果的新工作表仅适用于每个条目,因此我也只需要针对值进行特殊粘贴

这是除日历ID之外的其他日历ID

代码
函数onOpen(){//创建自定义菜单选项卡
var ui=SpreadsheetApp.getUi();
//或文档或格式。
ui.createMenu('Tratar Planilha')
.addItem('Datas e Parcelas','main')
.addItem('AdicionaráAgenda','criaEvento')//可能没有必要使用此选项
.addToUi();
}
函数main(){
separaData();
孔塔帕塞拉();
formatTexto();
转位贝拉();
};
函数separaData(){//根据需要拆分C9,并相应地打印其余部分
var电子表格=SpreadsheetApp.getActiveSheet();
电子表格.getRange('A26').activate();
spreadsheet.getCurrentCell().setFormula('=IF(C9=“a vista”;“0”;SPLIT(C9;“/”)));
电子表格.getRange('A27').activate();
电子表格.getCurrentCell().setFormula('=IF(A26=“”;“;$F11+A26)”);
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(“27:27”)、SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
};
函数contaParcela(){//计算付款数量及其值
var电子表格=SpreadsheetApp.getActiveSheet();
电子表格.getRange('A28').activate();
电子表格.getCurrentCell().setFormula('=IF(A26=“”;“;$H25/COUNTA(26:26)));
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(“28:28”)、SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('A30').activate();
电子表格.getCurrentCell().setFormula('=TEXTJOIN(““TRUE;COUNTA(26:26)”;“parcellas de;A28”);
};
函数transporteTabela(){//转换矩阵
var电子表格=SpreadsheetApp.getActiveSheet();
电子表格.getRange('A29').activate().setFormula('=IF(A26=“”;“;$C3”);
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(“29:29”)、SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
电子表格.getRange('A32').setFormula('=转置(27:29)');
电子表格.getRange('D32').setFormula('=IF(A32=“”;”;counta($26:$26)-counta($26:$26)+1);
spreadsheet.getRange('D33').activate();
电子表格.getCurrentCell().setFormula('=IF(A33=“”;”;D32+1));
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('D33:D')、SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
};
函数criaEvento(){//将转置的信息发送到带有说明的日历。
var电子表格=SpreadsheetApp.getActiveSheet();
var calendarID=CalendarApp.getCalendarById(“”);
var valTotal=spreadsheet.getRange('H25').getValue();
var valParcela=spreadsheet.getRange('A30').getValue();
var registros=spreadsheet.getRange('A32:D52').getValues();
Logger.log(registros);
对于(x=0;x),您可以参考以下示例代码:
带有输出的样本表数据:

  • 在本例中,我在工作表“Plan1”中运行submitData(),因此在“Summary”工作表的第3行和第4行中添加了3086,25
它是干什么的?
  • 我创建了一个表“摘要”,其中第1行包含日期
  • 创建addSumFormula(),它将添加
    function onOpen(){ //creates custom menu tabs
      var ui = SpreadsheetApp.getUi();
          // Or DocumentApp or FormApp.
          ui.createMenu('Tratar Planilha')
              .addItem('Datas e Parcelas', 'main')
              .addItem('Adicionar à Agenda', 'criaEvento') //there's probably no need to use this
          .addToUi();
    }
    
    function main(){
      separaData();
      contaParcela();
      formatTexto();
      transpoeTabela();
    };
    
    function separaData() { //splits C9 ifnecessary, and prints the rest accordingly
      var spreadsheet = SpreadsheetApp.getActiveSheet(); 
    
      spreadsheet.getRange('A26').activate(); 
      spreadsheet.getCurrentCell().setFormula('=IF(C9="à vista";"0";SPLIT(C9;"/"))'); 
     
      spreadsheet.getRange('A27').activate(); 
      spreadsheet.getCurrentCell().setFormula('=IF(A26="";"";$F11+A26)'); 
      spreadsheet.getActiveRange().autoFill(spreadsheet.getRange("27:27"), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    };
    
    function contaParcela(){ //counts number of payments and their values
      var spreadsheet = SpreadsheetApp.getActiveSheet(); 
      
      spreadsheet.getRange('A28').activate();
      spreadsheet.getCurrentCell().setFormula('=IF(A26="";"";$H25/COUNTA(26:26))'); 
    
      spreadsheet.getActiveRange().autoFill(spreadsheet.getRange("28:28"), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
     
      spreadsheet.getRange('A30').activate();
      spreadsheet.getCurrentCell().setFormula('=TEXTJOIN(""; TRUE; COUNTA(26:26); " parcelas de "; A28)');
    
    
    };
    
    function transpoeTabela(){ //transposes the matrix 
    
      var spreadsheet = SpreadsheetApp.getActiveSheet();
      spreadsheet.getRange('A29').activate().setFormula('=IF(A26="";"";$C3)');
      spreadsheet.getActiveRange().autoFill(spreadsheet.getRange("29:29"), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
      spreadsheet.getRange('A32').setFormula('=TRANSPOSE(27:29)');
      spreadsheet.getRange('D32').setFormula('=IF(A32="";"";counta($26:$26)-counta($26:$26)+1)');
      spreadsheet.getRange('D33').activate();
      spreadsheet.getCurrentCell().setFormula('=IF(A33="";"";D32+1)');
      spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('D33:D'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    };
    
    
    function criaEvento(){ //sends transposed info to Calendar with description.
      var spreadsheet = SpreadsheetApp.getActiveSheet();
      var calendarID = CalendarApp.getCalendarById('<MY_ID>');
      var valTotal = spreadsheet.getRange('H25').getValue();
      var valParcela = spreadsheet.getRange('A30').getValue();
      var registros = spreadsheet.getRange('A32:D52').getValues();
      Logger.log(registros);
      
      for (x=0; x <= registros.length; x++){
        var shift = registros[x];
        var data = shift[0];
        Logger.log(data);
        var empresa = shift[2];
        Logger.log(empresa);
        var nParcela = shift[3];
        var descricao = 'Total: R$' + valTotal + '\nValor da parcela: R$' + valParcela + '\nNº da parcela: ' + nParcela;
        Logger.log(descricao);
        if (data != ""){
          calendarID.createAllDayEvent(empresa,data).setDescription(descricao);
        }
        else{
          break;
        }
      }
    }
    
    function formatTexto() { //just sets cell formatting
      var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRange('A31:C31').activate();
      spreadsheet.getCurrentCell().setValue('DADOS ENVIADOS AO CALENDARIO');
      spreadsheet.getActiveRangeList().setBackground('#ffff00');
    };
    
    function addSumFormula() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Summary'); 
    
      spreadsheet.getRange('A2').activate();
      spreadsheet.getCurrentCell().setFormula('SUM(A3:A)'); 
      spreadsheet.getActiveRange().autoFill(spreadsheet.getRange("2:2"), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    };
    
    function submitData(){
      var sourceS = SpreadsheetApp.getActiveSheet();
      var destinationS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Summary'); 
      var amount = sourceS.getRange('A28').getValue();
      var dates = sourceS.getRange('A32:A').getDisplayValues().flat().filter(String);
      Logger.log(amount);
      Logger.log(dates);
    
      var searchRange = destinationS.getRange('1:1');
      dates.forEach(date => {
        Logger.log(date);
        var textFinder = searchRange.createTextFinder(date);
        var match = textFinder.findNext();
        if(match){
          matchCol = match.getColumn();
          //get row 3 cell of the matched column date and create a range string
          var a1Notation = match.offset(2,0).getA1Notation();
          var rangeStr = a1Notation+":"+a1Notation.replace(/[0-9]/g, '');
          Logger.log(rangeStr);
          //Get the count of data available under the matched column
          var colDataCnt = destinationS.getRange(rangeStr).getDisplayValues().flat().filter(String).length;
          Logger.log(colDataCnt);
    
          //Write data on the next blank range starting from row 3
          match.offset(2+colDataCnt,0).setValue(amount);
        }
      });
    }