将具有开始和结束日期的单个记录转换为Google表格中的多个记录?

问题描述 投票:0回答:2

我有一个包含3列的表格,分别是“开始日期”,“结束日期”和“金额”。我想按如下所示在新表中按天划分多个记录。

此表是Data Studio报表的来源,因此理想情况下,我希望它会自动更新。

原始表

Start Date  End Date    Amount
01/01/2020  05/01/2020  55
02/01/2020  04/01/2020  90

新表

Date    Amount
01/01/2020  55
02/01/2020  55
03/01/2020  55
04/01/2020  55
05/01/2020  55
02/01/2020  90
03/01/2020  90
04/01/2020  90
google-sheets google-sheets-formula spreadsheet google-data-studio
2个回答
1
投票

[这里,我已经使用google-apps-scripts来获取您的原始表,并在同一Google表格中获取新表。您可以根据需要更改此代码。希望这会有所帮助!

假设您是应用程序脚本的新手,我将从基本知识进行解释。

打开您的Google表格文档,然后转到工具->脚本编辑器。您将定向到scripts.google.com,并将获得一个空白的应用脚本文件(扩展名为.cs)。使用此脚本可获得以下输出。运行代码,并允许访问Google工作表。希望这对您有所帮助!请问您是否需要进一步的澄清!

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var date_values = []
  var amount
  date1 = data[1][0]
  date2 = data[1][1]
  amount = data[1][2]
  while(date1<=date2){
    date_values.push(new Date(date1))
    date1.setDate(date1.getDate()+1)
  }
  doTest(date_values, amount)
}

function doTest(arr, amount) {
  const no_dates = arr.length
  for (var k=2; k<no_dates+2; k++){
    SpreadsheetApp.getActiveSheet().getRange('E'+k).setValue(arr.shift());
    SpreadsheetApp.getActiveSheet().getRange('F'+k).setValue(amount);
  }
}

enter image description here


1
投票

我在这里是新手,但我想我找到了实现所需目标的公式。尽管确实有人会知道如何消除该要求,但它确实需要一个帮助器专栏。

假设您的数据在B3:D6中,则两个主要公式在F3中:

=ArrayFormula(rept(B3:B6 & ";",(C3:C6-B3:B6+1)))

和在F10中:

=ArrayFormula(transpose(split(concatenate( F3:F6,";"),";",1,1)))

以下是示例表:https://docs.google.com/spreadsheets/d/1Y4sH9oDdO1TiC3i-sfZJDZGGmEr9PIZd6k-da5f6P2c/edit?usp=sharing

首先进行日期减法,并使用分隔符将“开始日期”值重复多次。第二个连接了helper列中的所有日期值,然后将所有日期值分成一列。

最后,对原始数据列使用日期值来完成VLOOKUP,以查找金额。

CONCATENATE函数可能有限制(50,000个字符?),该限制会限制最大值的数量,具体取决于您的日期差异。

让我知道这是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.