Я начал использовать финансовые таблицы и ищу способ извлечения чисел с плавающей запятой (цены) из многострочных строк. Прикреплен пример того, как я форматирую цены и итоговые суммы по категориям:
пример формата таблицы
Как видите, я вручную ввожу суммы, найденные в скобках, чтобы их просуммировать, но это занимает много времени и есть вероятность ошибки.
Я ищу ЛИБО скрипты приложения или решение формулы, которое будет извлекать числа с плавающей запятой или числа, содержащиеся в круглых скобках, из одной строки и суммировать их.
ТИА!
Я попробовал использовать сценарии приложений Google следующим методом
function addPricesFoundWithinCell(input) {
var regExp = /(?:\()[^\(\)]*?(?:\))/g;
var matches = regExp.exec(input);
const initialValue = 0;
return matches.reduce(
(accumulator, currentValue) => accumulator + currentValue,
initialValue,
);
}
это не работает! Я не очень хорошо знаком с javascript
Поздравляем с новыми привилегиями!





Вы можете исправить свою функцию следующим образом:
function addPricesFoundWithinCell(input) {
return (input.match(/\(\d*\.?\d+\)/g) || [])
.reduce(function(prev, curr) {
return prev + +curr.replace(/^\(|\)$/g, '');
}, 0);
}
Регулярное выражение \(\d*\.?\d+\) соответствует целым числам или числам с плавающей запятой внутри круглых скобок. Эти круглые скобки будут удалены позже при суммировании чисел, см. curr.replace(/^\(|\)$/g, '').
Альтернативно вы можете попробовать использовать matchAll с вашим регулярным выражением, но вам нужно будет использовать Array.from:
function addPricesFoundWithinCell(input) {
return (Array.from(input.matchAll(/\((\d*\.?\d+)\)/g), x=>x[1]) || [])
.reduce(function(prev, curr) {
return prev + +curr;
}, 0);
}
С Array.from(input.matchAll(/\((\d*\.?\d+)\)/g), x=>x[1]) вы получаете контент только группы 1 из матчей.
Большое спасибо! Regex мне чуждо, ха-ха. я очень ценю это
Вы можете использовать
=SUM(SPLIT(REGEXREPLACE(A1,"(\b[\d.]+\b)|.","$1"),CHAR(10)))
Вы можете попробовать:
=sum(split(A1,"()"))(при условии, что имя_элемента не является полным номером)