Задать вопрос
  • Как изменить параметры ячеек на нескольких листах одновременно?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Я обычно делаю так:
    1) Делаю заготовку кода для одного листа. Это может быть даже переработка кода макрорекордера
    2) Запускаю её на всех листах, кроме "чёрного списка"
    /**
    * Выполняет действия на всех листах, кроме тех, которые указаны в blackList
    * [ ProgrammerForever (c) 2020 ]
    * @return Не возвращает значений
    */
    function listChanger(){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var blackList = ["Настройки", "Data"];// Чёрный список. На этих листах действий не будет
      var sheets = ss
    			  .getSheets()
    			  .map(sheet=>sheet.getName())
    			  .filter(sheetName=>blackList.indexOf(sheetName)===-1);
        
      for(var sheetIndex in sheets){
        var currentSheet = ss.getSheetByName(sheets[sheetIndex]);
    	//Что-то делаем с currentSheet
      };
    };
    Ответ написан
    1 комментарий
  • Как восстановить загрузочный ссд?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1) Проверьте кабели питания и данных
    2) Проверьте настройки BIOS, возможно нужен полный сброс настроек
    3) Если есть возможность(самый простой вариант) - проверьте диск на другом компьютере
    Ответ написан
    3 комментария
  • Какой диспетчер задач вы рекомендуете?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Ответ написан
    Комментировать
  • Как создать триггер для запуска программы в назначенное время?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    1) Создайте поминутный триггер.
    2) Внутри функции делайте проверку на время.
    const time    = new Date();
    const hours   = time.getHours();
    const minutes = time.getMinutes();
    if ((hours!=21)&&(minutes!=0)){return;};

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

    Функция запускается сама, таблицу держать открытой не надо.
    Ответ написан
    21 комментарий
  • Как нормализовать базу Ф.И.О.: телефон в notepad++?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Я бы сделал так:
    1) Вставить перед каждой записью \t (табуляция)
    2) заменить ":+7" на "\t+7"
    3) Что получится - скопировать в Excel
    4) Первый столбец скопировать и импортировать на новый лист, разделив на столбцы по пробелу
    5) Применить к трем первым столбцам формулу, которая делает первую букву прописной, или вставить "нет", где нет ничего, четвертый - без изменений
    6) Скопировать все четыре столбца обратно в Notepad++
    7) Заменить \t на ничего
    8) ?????
    9) PROFIT!!!
    Ответ написан
    1 комментарий
  • Как сцепить 2 функции за раз в одном выражении?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Применяйте последовательно.
    =UPPER(A2& " " &B2)
    В Google Sheets можно делать ещё так:
    =ArrayFormula(UPPER(A2:A& " " &B2:B))
    Это заполнит весь столбец за раз.
    Ответ написан
    1 комментарий
  • Как можно создать input для получения данных от пользователя?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Есть как минимум пара вариантов:
    1) Использовать Browser.inputBox(title, prompt, buttons);
    const title   = "Заголовок";
    const prompt  = "Сообщение";
    const buttons = Browser.Buttons.OK;
      
    var retVal1 = Browser.inputBox(title, prompt, buttons);

    Возвращает строку, которую ввёл юзер.

    2)Использовать SpreadsheetApp.getUi().prompt()
    const title   = "Заголовок";
    const prompt  = "Сообщение";
    const buttons = Browser.Buttons.OK;
      
    var retVal2 = SpreadsheetApp.getUi().prompt(title, prompt, buttons);

    Возвращает объект, в котором есть пара методов:
    .getResponseText() - возвращает введенный текст
    .getSelectedButton() - возвращает нажатую кнопку

    Посмотрите как работает в демонстрационной таблице

    Есть ещё варианты, например, использовать боковую панель или модальное окно, но там всё надо прописывать самому, включая скрипты, стили и разметку.
    Ответ написан
    Комментировать
  • Как найти угол между осью Y+ и линией проведённой к точке на системе координат?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Тут проще всего использовать скалярное произведение. В данном случае, единичного вектора вдоль Y (единичный, т.к. потом проще считать), и радиус-вектора точки. Из готового скалярного произведения можно найти косинус угла, а из него и сам угол
    Ответ написан
    Комментировать
  • Как сделать сортировка колонок по значениям (Excel)?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    1) Записать всё в 2 столбца
    2) Выбрать уникальные значения по первому столбцу
    3) Выбрать данные из 1) по значениям из 2)

    В Google Sheets я бы использовал FILTER() и UNIQUE(), а в Excel - скриптом на VBA быстрее получится
    Ответ написан
    5 комментариев
  • Чем друг от друга отличаются эти три выражения?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1)
    var i = 0;
    if( (function(){return i%2==0})(i) ){
      console.log(i);
    };

    в условии функция, вызванная с глобальной i=0, вернет true, в консоль выведется 0

    2) То же самое, что 1). Только в 1) функция обернута в скобки, и то что в скобках - вызывается, в 2) в скобки обернут результат вызова. В консоль - 0.

    3) Нет вызова функции внутри скобок, но сама функция интерпретируется как true, и получаем тот же 0 в консоли.

    Зачем это всё? В образовательных целях?
    Ответ написан
    2 комментария
  • Как увеличить кол-во вариантов условного форматирования в csv?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Если Excel не воспринимает сепаратор(разделитель), ему можно подсказать. В начале файла добавьте строку:
    sep=;
    Вместо точки с запятой может быть любой символ, который будет воспринят как разделитель столбцов. По умолчанию sep=, и Win1251 кодировка, насколько я помню. Удобно это всё менять в Notepad++
    Ответ написан
    1 комментарий
  • Как построить сложную диаграмму с помощью Excel как на рисунке?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Можно построить несколько диаграмм, наложить друг на друга, и сделать у каждой полупрозрачность. Костыль, но как-то раз мне это помогло, когда нужен был очень эксклюзивный график и требования заказчика "чтобы было пиксель в пиксель, как на картинке"
    5edcda2135f93052720164.png
    Ответ написан
    1 комментарий
  • Каким редактором для редактирования csv-файлов вы пользуетесь?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Если нужно именно работать с файлом, быстрее и удобнее Excel, думаю, ничего нет.
    Если нужно подправить что-то, например сменить кодировку, или добавить
    sep=,
    в начало файла, чтобы его Excel понимал, то Notepad++, т.к там есть макросы и замена текста по регуляркам.
    Ответ написан
    Комментировать
  • Как просуммировать с условием?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    В Google Sheets есть пару киллер-фич, а именно FILTER() и QUERY()
    Вам подойдёт первое (вводить в Лист2 B1, распространить вниз):
    =СУММ( FILTER(Лист1!B:B;Лист1!A:A<=A1) )
    Пояснение работы: берется Лист1!B:B, но не все, а только те, в которых Лист1!A:A<=A1. Что получится - суммируется.
    Ответ написан
    Комментировать
  • Как правильно писать регулярные выражения в google sheets?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Возможно, что нужно указать флаги в регулярном выражении (gmi). Если нет g флага, .match() возвращает только первое совпадение в виде массива, в котором совпадение находится по индексу 0.
    Ответ написан
    Комментировать
  • Можно ли в query использовать ссылку на ячейку?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Используйте ДВССЫЛ(), он же INDIRECT()
    =ДВССЫЛ("workdays_"&A1)
    Ответ написан
    1 комментарий
  • Как определить лидерство в матче?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    const totalTime = 90;
    const a = [12, 34, 56];
    const b = [45];
    
    let score = 0;
    let aWin = 0;
    let bWin = 0;
    let draw = 0;
    for (let i=0;i<totalTime;i++){
    score+=(a.indexOf(i)!=-1?1:0)-(b.indexOf(i)!=-1?1:0);
    aWin += score>0?1:0;
    bWin += score<0?1:0;
    draw += score==0?1:0;
    };
    console.log("a - " + aWin + " minutes");
    console.log("b - " + bWin + " minutes");
    console.log("a=b - " + draw + " minutes");
    Ответ написан
    3 комментария
  • Формулы 3д обектов?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Матрицы и линейная алгебра с ними связанная, используются для трансформации точек. Например, есть матрица, которая поворачивает вектор на определенный угол. Вектор(радиус-вектор), в данном случае, заменяет собой точку. Матрица, на которую надо умножить вектор (и получить другой вектор) - преобразование. Есть много всяких преобразований - проекции, вращения, масштабирование, перемещение и т.п.
    Можно всё это сделать примитивно с помощью формул школьной геометрии, но суть матриц - в том что такие операции могут быть вычислены на видеокарте, что гораздо быстрее.
    1) Углубиться в линейную алгебру - понятие векторов, матриц, преобразований матриц, умножение и т.п.
    2) Углубиться в геометрию, хватит школьного уровня - векторы и операции с ними.

    Если нужно "только нарисовать", то можно обойтись школьной математикой:
    Xпроекции = X*cos(xx) + Y*cos(xy) + Z*cos(xz)
    Yпроекции = X*cos(yx) + Y*cos(yy) + Z*cos(yz)

    ,где
    xx - угол между новой осью X и старой X (0)
    xy - угол между новой осью X и старой Y (90)
    xz - угол между новой осью X и старой Z (240)
    yx - угол между новой осью Y и старой X (-90)
    yy - угол между новой осью Y и старой Y (0)
    yz - угол между новой осью Y и старой Z (150)
    Углы в скобках - как пример, когда ось Z находится в 3 четверти под 45 градусов.
    Тогда:
    Xпроекции = X + Z*cos(xz)
    Yпроекции = Y + Z*cos(yz)

    Берите объект как массив точек (для начала куб например - 8 точек) и присваивайте сначала координаты XYZ, а потом пересчитывайте их по этой формуле и отображайте на экране. И всё будет работать.
    PS: в школе ещё, как только появились векторы, дошел до этих формул сам; пока выводил - исписал 12листовую тетрадку.
    Ответ написан
    Комментировать
  • Как сделать Excel (Calc) файл с формами и проверками?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Используйте условное форматирование, для каждой характеристики на каждую группу создайте правило.
    Главная - Условное форматирование - Создать правило... - Использовать формулу для определения форматируемых ячеек
    И там пишите что-то вроде:
    =ДВССЫЛ("RC2";0)="Фрукты"
    2 - номер столбца, который проверяем. Если в этом столбце есть "Фрукты", то ячейки в этой строке применят формат, который укажете в правиле.

    Но учитывая что тут получается перемножение множеств, то правил придётся сделать много. (10 категорий * 10 характеристик = 100 правил)
    Ответ написан
    1 комментарий
  • Как импортировать информацию с Google.Maps в Google Sheets?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Если получить данные по этому url, то видно, что изначально там информации нет, т.е. все полезные данные подгружаются JavaScript'ом. Если выкинуть всё лишнее, скрипты и стили, то возвращается такой код:
    <!DOCTYPE html>
    <html itemscope="" itemtype="http://schema.org/Place" lang="en">
    
    <head>
        <title> Google Maps </title>
    </head>
    
    <body class="keynav-mode-off" tabindex="-1">
        <noscript>
            <div id="no-script">
                <div class="no-script-message">
                    <div> When you have eliminated the <strong>JavaScript</strong>, whatever remains must be an empty page. </div> <a class="no-script-help-link" href="//support.google.com/maps/?hl=en&amp;authuser=0&amp;p=no_javascript" target="_blank"> Enable JavaScript to see Google Maps. </a>
                </div>
            </div>
        </noscript> 
    </body>
    
    </html>
    Ответ написан
    Комментировать