С момента появления Excel стал самым популярным и универсальным инструментом автоматизации расчетов для непрограммистов и полупрограммистов (таких, как я). В свое время я много всякого писал на VBA, делал в студенчестве скрипты для оформления курсовых, даже запилил для диссертации мощный итерационный расчет распространения тепла в твердом топливе во время горения, который минут на 20 парализовывал комп. Сегодня в эпоху облаков и веб-решений эту нишу захватывают Google Sheets.

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


Работаю я в сфере управления и планирования строительством, а на стройке что-то сложнее икселя приживается очень плохо. Поэтому у гугл таблиц есть все шансы завоевать сердца (а может даже умы) строителей. Некоторые приемы, уже ставшие стандартом работы в электронных таблицах, гугл перенимает у предшественников, поэтому на первый взгляд разница с искселем незначительна. При этом некоторые возможности реализуются в новом виде и одной из таких удачных на мой взгляд реализаций стали формулы массива. Они были и в икселе, но посмотрев на них, хотелось сказать “слава богу, что я не знаю где они мне могут понадобиться”. В гугле же с ними прямо приятно работать и, думаю, они еще проявят свою полезность во многих задачах. Я же покажу, как их можно применять для работы со строительными визуализациями.

Демонстрировать все это в видеоформате проще, поэтому сделал небольшой эксплейнер:


А вот код скрипта, который позволяет увязать визуализацию с разными обозначениями со справочником параметров:

/**
 * Подставляет вместо закодированных значений соответствующие значения из справочника
 * @param {"A5:D20"} arr массив исходных закодированных значений
 * @param {"A21:D25"} sprav справочник (массив)
 * @param {"цена"} param искомый в справочнике параметр
 * @customfunction
 */
function ВИСП(arr, sprav, param) {
  if(typeof sprav=="object"&&sprav.length!=undefined) {
    if(typeof arr=="object"&&arr.length!=undefined) {
      for (var i = 0; i<arr.length; i++){
        for (var j= 0; j<arr[i].length; j++){
          if (arr[i][j] != ""){
            var r = sprav.map(function(value){return value[0]}).indexOf(arr[i][j]);
            var c = sprav[0].indexOf(param);
            if (r!=-1 && c!=-1) {arr[i][j] = sprav[r][c]}
          }
        }
      }
    }  
  }
  return  arr;
}

Возможно оптимизация кода не на высоте, я все таки не PROграммист, но он работает.

Конечно, те кто в теме, скажут что это все фигня, давно уже есть BIM. Да, есть. Но мы быстрей прикрутим таблицы к модели в SketchUp (тоже гугл, чтоб его), чем внедрим BIM. Потому что пока в BIM не работают все от производителей стройматериалов и проектировщиков до строителей и эксплуатации, от него больше трудозатрат, чем пользы. А в нашей стране это произойдет не скоро.

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

Комментарии (8)


  1. sshikov
    27.07.2019 15:50

    SketchUp уже давно не гугль, не?


    1. RePlaner Автор
      27.07.2019 16:04

      Точно! Аж с 2012


  1. Quiensabe
    27.07.2019 16:40

    Спасибо за статью! Потестировал вашу функцию, весьма удобно!)
    Даже странно, что нет встроенного аналога.

    Для тех кто, как я, никогда не использовал скрипты в таблицах
    Инструменты->Редактор скриптов, добавляем код функции, потом в Инструменты->Макросы — импортируем фукнцию в таблицу, чтобы ее можно было использовать. Остальное показано в видео.

    При использовании именованных диапазонов ячеек в формулах — не забываем очищать место под таблицу (иначе функция массива не отработает), и для подтверждения ввода формулы нажимаем Ctrl+Shift+Enter.


  1. h317
    28.07.2019 00:44

    А что конкретно вы имеете ввиду под интеграцией с Sketchup? Грубо говоря, один квадрат в гугл таблице — одна квартира в Скетчуп, или вы по другому их соединяете?

    Скажу сразу за оба видео которые я посмотрел на вашем канале. Мне очень понравился ваш подход, все продумано и с хороший структурой и правда, что БИМ есть только на бумаге :) не видел не одного проекта где БИМ был использован на 100% (говорю про Канаду, проекты от 10 мил до 2 млрдв все как один).

    Если можно, я вопрос к прошлому видео тут задам: на сколько я понял, в вашей модели отчетность идет раз в месяц, после того как заплатил субподрядчик, что должно хорошо работать для фин. модели. Не поделитесь ли методикой анализа работы во время месяца, как вы мониторите что происходит или будет скоро происходить?


    1. RePlaner Автор
      28.07.2019 01:15

      Интеграцию со Skethup можно сделать напрямую, когда 1 объект в модели будет соответствовать одному квадратику в визуализации. И в зависимости от значения в визуализации объект в модели будет менять цвет, видимость или прозрачность. А можно сложнее, когда значения группы квадратиков (например целый этаж) как-то обобщаются и передаются в модель, где один объект представляет тот самый этаж (то же самое для интеграции с WBS в проджекте, ведь она может быть не такой детальной, как визуализация).

      Принцип может быть такой:
      1. В визуализации нужно каждому элементу присвоить его идентификатор. В таблицах это очень просто, автозаполнением можно быстро проставить в каждую клетку [этаж+номер квартиры] или что-то подобное.
      2. В 3d-модели тоже нужно создать соответствующие элементы (в Sketshup легко создаются массивы однотипных элементов) и присвоить те же идентификаторы, что и в таблице (вот это не представляю как сделать, не погружался в вопрос).
      3. Дальше дело за малым: скрипт в таблице превращает данные о элементах визуализации в какой-то стандартный вид (текст, JSON, что придумаете), а скрипт в Sketchup (там есть Ruby) принимает эту инфу и меняет свойства соответствующих элементов.

      Но это все просто мысли, мы их не увязывали, не было такой задачи. Если взглянуть шире, может оказаться «зачем это все?», ведь 3d модель на самом деле не очень информативна и даже не очень удобна (хоть и эффектна). Она скорей для тех, кто совсем не в деталях и кого хочется побаловать такими изысками (самые топ-топ-менеджеры, акционеры, потенциальные заказчики). А для таких случаев раз в пару месяцев проще вручную модель покрасить


    1. RePlaner Автор
      28.07.2019 01:35

      Про финмодель: пока ее главный потребитель — гендиректор, который прилетает на объект не часто и смотрит отчеты раз в месяц, так как объектов много и они в разных городах. Мы сфокусированы на том, чтобы предоставить ему интерфейс, в котором он может быстро оценить ход проектов для управления бизнесом. Убедить его, что это полезно. Я пытался сделать так, чтобы и РП нашли в этом свою пользу, они могут быстро получить информацию по актам выполнения и оплатам. Но в целом, они никак не замотивированы заниматься таким планированием, т.к. это никак не связано с их KPI. В перспективе контроль, конечно, должен носить непрерывный характер, а не раз в месяц, Но это когда мы выстроим все процессы и сформулируем требования к их участникам. Такая вот методика внедрения в большой компании, в которой много действующих лиц и отделов, и у всех свои интересы)


  1. galqiwi
    28.07.2019 02:30

    Как раз на xkcd недавно появился комикс в тему.
    image


    1. RePlaner Автор
      28.07.2019 08:21

      Хм, ни разу не возникало дилеммы. Я всегда только один голос слышу)