Преобразовать одну запись с начальной и конечной датой в несколько записей в Google Sheets? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть таблица с 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

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Я новичок в публикации здесь, но я думаю, что нашел формулу для достижения того, чего вы хотите. Однако для этого требуется вспомогательный столбец, хотя кто-то может знать, как устранить это требование.

Если предположить, что ваши данные находятся в 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

Первая выполняет вычитание даты и повторяет значение «начальной даты» столько раз, сколько нужно, с разделителем. Второй объединяет все значения даты из вспомогательного столбца, а затем разбивает все их на один столбец.

Наконец, выполняется VLOOKUP, используя значения даты для исходного столбца данных, чтобы найти сумму.

Могут быть ограничения на функцию CONCATENATE (50 000 символов?), Которые ограничивают максимальное количество значений в зависимости от того, насколько велики ваши разницы в датах.

Дайте мне знать, если это поможет.

1 голос
/ 24 апреля 2020

Здесь я использовал google-apps-scripts, чтобы получить исходную таблицу и получить новую таблицу на том же листе Google. Вы можете изменить этот код в соответствии с вашими требованиями. Надеюсь, это поможет!

Предполагая, что вы новичок в сценариях приложения, я объясню с основ.

Откройте документ листов Google, а затем go в Сервис -> Редактор скриптов. Вы будете направлены на 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

...