Автоматизируйте преобразование текста в строки и столбцы (Google Sheets) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь преобразовать данные формы заказа, представленные на веб-сайте Squarespace, из следующего формата в таблицу с 4 столбцами:

Магазин, Товар, Количество, Детали; Магазин2, Товар2, Количество2, Детали2; (et c ...)

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

Пример электронной таблицы: https://docs.google.com/spreadsheets/d/1ZEWtmMiWO0Us76Z7o7GB7Salw1Rl_-1PhK6GzeOD0GM/edit?usp=sharing

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

Любой совет приветствуется, включая совершенно новые способы обработки данных, будь то с помощью скрипта, другого удаленно доступного приложения для обработки заказов, совместимого с формами Squarespace, или встроенного в Sheets.

1 Ответ

2 голосов
/ 14 апреля 2020
  • Вы хотите добиться следующего преобразования.

    enter image description here

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Пример формулы:

=ARRAYFORMULA(SPLIT(TRANSPOSE(split(A4,";")),","))
  • В этой формуле ячейка "A4" имеет входное значение.
  • Вы уже использовали формулу =TRANSPOSE(split(A10,";")). В этом ответе я использовал это.
    • Для TRANSPOSE(split(A10,";")) значение делится на , с использованием SPLIT и ARRAYFORMULA.

Результат:

enter image description here

Пример скрипта:

Если вы хотите использовать скрипт Google Apps, вы также можете использовать следующий скрипт.

function myFunction(value) {
  const values = value.split(";");
  return values.splice(0, values.length - 1).map(e => e.split(",").map(f => isNaN(f) ? f : Number(f)));
}
  • В этом случае, пожалуйста, скопируйте и вставьте скрипт в редактор скриптов и поместите пользовательскую функцию =myFunction(A4) в ячейку.
    • Можно получить тот же результат с приведенной выше формулой.

Список литературы:

Если я неправильно понял ваш вопрос, а это не то направление, которое вам нужно, я прошу прощения.

...