• Как подгрузить курс валюты с сайта Tinkoff?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Его просто нет в исходном HTML, оно получается скриптом
    Смотрите в сторону этого запроса:
    fetch("https://api.tinkoff.ru/v1/currency_rates?from=USD&to=RUB", {
      "headers": {
        "accept": "*/*",
        "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
        "content-type": "application/x-www-form-urlencoded",
        "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"99\", \"Google Chrome\";v=\"99\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-site"
      },
      "referrer": "https://www.tinkoff.ru/",
      "referrerPolicy": "strict-origin-when-cross-origin",
      "body": null,
      "method": "GET",
      "mode": "cors",
      "credentials": "omit"
    });

    В ответе:

    {"trackingId":"WEE285K7UR","resultCode":"OK","payload":{"lastUpdate":{"milliseconds":1646839634102},"rates":[{"category":"C2CTransfers","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":111.25,"sell":138.75},{"category":"OPSRateGroup","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"DebitCardsTransfers","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferFrom10To100G13CO","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"CUTransfersPremium","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferBelow10G11","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"DepositPayments","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":111.25,"sell":138.75},{"category":"SMETransferAbove100","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferBelow10","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"CreditCardsOperations","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":111.25,"sell":138.75},{"category":"CUTransferAbove100","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"PrepaidCardsOperations","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":111.25,"sell":138.75},{"category":"SMETransferAbove100G13","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferFrom10To100G13","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferBelow10G12","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferFrom10To100G11","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferBelow10G13CO","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"CUTransferFrom10To100","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferAbove100G12","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferAbove100G13CO","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferAbove100G11","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"PrepaidCardsTransfers","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"DebitCardsOperations","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":111.25,"sell":138.75},{"category":"SavingAccountTransfers","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferFrom10To100G12","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"CUTransfersPro","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"CreditCardsTransfers","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferBelow10G13","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95},{"category":"SMETransferFrom10To100","fromCurrency":{"code":840,"name":"USD","strCode":"840"},"toCurrency":{"code":643,"name":"RUB","strCode":"643"},"buy":113.05,"sell":140.95}]}}

    Ответ написан
    4 комментария
  • Можно ли настроить Google таблицу, чтобы в неё автоматически добавлялись строки с определённым значением из другой таблицы (с 10 листов в 1 итоговый)?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    1) Импортировать всё в таблицу. Функция IMPORTRANGE и можно ещё использовать литерал массива
    =arrayformula({
    importrange(id1;range1);
    importrange(id2;range2);
    importrange(id3;range3);
    importrange(id4;range4)
    })

    2) Применить фильтр. Функция FILTER(проще) или QUERY(быстрее)
    =query(arrayformula({данные});"SELECT * WHERE Col1 IS NOT NULL")
    Ответ написан
  • Как парсить json с параметрами "если" и "то"?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    fetch("http://api.com/api/query?id=1").
    then(ret=>ret.json()).then(ret=>{
    	let dataNames = ret.data.name.split(", ");
    	let names = ["Krusl",  "Goody", "Timo"];
    	let outName = "";
    	
    	for (i=0; i<names.length; i++){
    	    let name = names[i];
    		let index = dataNames.indexOf(name);
    		if(-1!==index){
    			outName = name;
    			break;
    		};
    	};
    	
    	$("#Name").text("Nick: "+outName);
    	$("#Year").text("Years old: "+ret.data.year)
    })
    Ответ написан
    1 комментарий
  • Как спарсить 3 цены с карточки товара (с помощью XPath) в гугл таблицы если у цен код одинаковый?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Там только текущая цена, это не подойдёт. Советую обратить внимание на
    этот кусок кода в странице:
    ({'CONFIG':{'USE_CATALOG':true,'SHOW_QUANTITY':false,'SHOW_PRICE':true,'SHOW_DISCOUNT_PERCENT':false,'SHOW_OLD_PRICE':false,'DISPLAY_COMPARE':false,'SHOW_SKU_PROPS':true,'OFFER_GROUP':false,'MAIN_PICTURE_MODE':'IMG','SHOW_BASIS_PRICE':true,'ADD_TO_BASKET_ACTION':['ADD'],'SHOW_CLOSE_POPUP':true,'USE_STICKERS':true},'PRODUCT_TYPE':'3','VISUAL':{'ID':'bx_117848907_312'},'DEFAULT_PICTURE':{'PREVIEW_PICTURE':{'SRC':'/local/templates/vortex/components/bitrix/catalog/main/bitrix/catalog.element/.default/images/no_photo.png','WIDTH':'150','HEIGHT':'150'},'DETAIL_PICTURE':{'SRC':'/local/templates/vortex/components/bitrix/catalog/main/bitrix/catalog.element/.default/images/no_photo.png','WIDTH':'150','HEIGHT':'150'}},'PRODUCT':{'ID':'312','NAME':'Дезинфицирующее средство Forbicid'},'BASKET':{'QUANTITY':'quantity','BASKET_URL':'/basket/','SKU_PROPS':'YToxOntpOjA7czo0OiJCVUxLIjt9','ADD_URL_TEMPLATE':'/catalog/moyushchie-i-dezinfitsiruyushchie-sredstva-dlya-agropromyshlennogo-kompleksa/ptitsevodstvo/forbicid/?action=ADD2BASKET&id=#ID#','BUY_URL_TEMPLATE':'/catalog/moyushchie-i-dezinfitsiruyushchie-sredstva-dlya-agropromyshlennogo-kompleksa/ptitsevodstvo/forbicid/?action=BUY&id=#ID#'},'OFFERS':[{'ID':'1023','NAME':'Forbicid','TREE':{'PROP_20':'4'},'PRICE':{'VALUE':'497','DISCOUNT_VALUE':'497','PRINT_VALUE':'497 руб.','PRINT_DISCOUNT_VALUE':'497 руб.','DISCOUNT_DIFF':'0','PRINT_DISCOUNT_DIFF':'0 руб.','DISCOUNT_DIFF_PERCENT':'0','CURRENCY':'RUB'},'BASIS_PRICE':{'PRICE_ID':'1','ID':'454','CAN_ACCESS':'Y','CAN_BUY':'Y','MIN_PRICE':'Y','CURRENCY':'RUB','VALUE_VAT':'497','VALUE_NOVAT':'497','DISCOUNT_VALUE_VAT':'497','DISCOUNT_VALUE_NOVAT':'497','ROUND_VALUE_VAT':'497','ROUND_VALUE_NOVAT':'497','VALUE':'497','UNROUND_DISCOUNT_VALUE':'497','DISCOUNT_VALUE':'497','DISCOUNT_DIFF':'0','DISCOUNT_DIFF_PERCENT':'0','VATRATE_VALUE':'0','DISCOUNT_VATRATE_VALUE':'0','ROUND_VATRATE_VALUE':'0','PRINT_VALUE_NOVAT':'497 руб.','PRINT_VALUE_VAT':'497 руб.','PRINT_VATRATE_VALUE':'0 руб.','PRINT_DISCOUNT_VALUE_NOVAT':'497 руб.','PRINT_DISCOUNT_VALUE_VAT':'497 руб.','PRINT_DISCOUNT_VATRATE_VALUE':'0 руб.','PRINT_VALUE':'497 руб.','PRINT_DISCOUNT_VALUE':'497 руб.','PRINT_DISCOUNT_DIFF':'0 руб.'},'DISPLAY_PROPERTIES':'<dt>Артикул<\/dt><dd>12141<\/dd>','PREVIEW_PICTURE':{'ID':'2689','SRC':'/upload/iblock/0c9/0c9dd963188c3a1fed208048a9f2101c.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/0c9/330_430_1/0c9dd963188c3a1fed208048a9f2101c.jpg','SMALL':'/upload/resize_cache/iblock/0c9/90_90_2/0c9dd963188c3a1fed208048a9f2101c.jpg'},'DETAIL_PICTURE':{'ID':'2689','SRC':'/upload/iblock/0c9/0c9dd963188c3a1fed208048a9f2101c.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/0c9/330_430_1/0c9dd963188c3a1fed208048a9f2101c.jpg','SMALL':'/upload/resize_cache/iblock/0c9/90_90_2/0c9dd963188c3a1fed208048a9f2101c.jpg'},'CHECK_QUANTITY':false,'MAX_QUANTITY':'0','STEP_QUANTITY':'1','QUANTITY_FLOAT':false,'MEASURE':'шт','OFFER_GROUP':false,'CAN_BUY':true,'SLIDER':[{'ID':'2689','SRC':'/upload/iblock/0c9/0c9dd963188c3a1fed208048a9f2101c.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/0c9/330_430_1/0c9dd963188c3a1fed208048a9f2101c.jpg','SMALL':'/upload/resize_cache/iblock/0c9/90_90_2/0c9dd963188c3a1fed208048a9f2101c.jpg'}],'SLIDER_COUNT':'1'},{'ID':'309','NAME':'Forbicid','TREE':{'PROP_20':'6'},'PRICE':{'VALUE':'2284','DISCOUNT_VALUE':'2284','PRINT_VALUE':'2 284 руб.','PRINT_DISCOUNT_VALUE':'2 284 руб.','DISCOUNT_DIFF':'0','PRINT_DISCOUNT_DIFF':'0 руб.','DISCOUNT_DIFF_PERCENT':'0','CURRENCY':'RUB'},'BASIS_PRICE':{'PRICE_ID':'1','ID':'41','CAN_ACCESS':'Y','CAN_BUY':'Y','MIN_PRICE':'Y','CURRENCY':'RUB','VALUE_VAT':'2284','VALUE_NOVAT':'2284','DISCOUNT_VALUE_VAT':'2284','DISCOUNT_VALUE_NOVAT':'2284','ROUND_VALUE_VAT':'2284','ROUND_VALUE_NOVAT':'2284','VALUE':'2284','UNROUND_DISCOUNT_VALUE':'2284','DISCOUNT_VALUE':'2284','DISCOUNT_DIFF':'0','DISCOUNT_DIFF_PERCENT':'0','VATRATE_VALUE':'0','DISCOUNT_VATRATE_VALUE':'0','ROUND_VATRATE_VALUE':'0','PRINT_VALUE_NOVAT':'2 284 руб.','PRINT_VALUE_VAT':'2 284 руб.','PRINT_VATRATE_VALUE':'0 руб.','PRINT_DISCOUNT_VALUE_NOVAT':'2 284 руб.','PRINT_DISCOUNT_VALUE_VAT':'2 284 руб.','PRINT_DISCOUNT_VATRATE_VALUE':'0 руб.','PRINT_VALUE':'2 284 руб.','PRINT_DISCOUNT_VALUE':'2 284 руб.','PRINT_DISCOUNT_DIFF':'0 руб.'},'DISPLAY_PROPERTIES':'<dt>Артикул<\/dt><dd>12145<\/dd>','PREVIEW_PICTURE':{'ID':'1039','SRC':'/upload/iblock/3d3/3d3ec490013beb7a389b856a5d85be34.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/3d3/330_430_1/3d3ec490013beb7a389b856a5d85be34.jpg','SMALL':'/upload/resize_cache/iblock/3d3/90_90_2/3d3ec490013beb7a389b856a5d85be34.jpg'},'DETAIL_PICTURE':{'ID':'1039','SRC':'/upload/iblock/3d3/3d3ec490013beb7a389b856a5d85be34.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/3d3/330_430_1/3d3ec490013beb7a389b856a5d85be34.jpg','SMALL':'/upload/resize_cache/iblock/3d3/90_90_2/3d3ec490013beb7a389b856a5d85be34.jpg'},'CHECK_QUANTITY':false,'MAX_QUANTITY':'0','STEP_QUANTITY':'1','QUANTITY_FLOAT':false,'MEASURE':'шт','OFFER_GROUP':false,'CAN_BUY':true,'SLIDER':[{'ID':'1039','SRC':'/upload/iblock/3d3/3d3ec490013beb7a389b856a5d85be34.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/3d3/330_430_1/3d3ec490013beb7a389b856a5d85be34.jpg','SMALL':'/upload/resize_cache/iblock/3d3/90_90_2/3d3ec490013beb7a389b856a5d85be34.jpg'}],'SLIDER_COUNT':'1'},{'ID':'310','NAME':'Forbicid','TREE':{'PROP_20':'7'},'PRICE':{'VALUE':'8954','DISCOUNT_VALUE':'8954','PRINT_VALUE':'8 954 руб.','PRINT_DISCOUNT_VALUE':'8 954 руб.','DISCOUNT_DIFF':'0','PRINT_DISCOUNT_DIFF':'0 руб.','DISCOUNT_DIFF_PERCENT':'0','CURRENCY':'RUB'},'BASIS_PRICE':{'PRICE_ID':'1','ID':'42','CAN_ACCESS':'Y','CAN_BUY':'Y','MIN_PRICE':'Y','CURRENCY':'RUB','VALUE_VAT':'8954','VALUE_NOVAT':'8954','DISCOUNT_VALUE_VAT':'8954','DISCOUNT_VALUE_NOVAT':'8954','ROUND_VALUE_VAT':'8954','ROUND_VALUE_NOVAT':'8954','VALUE':'8954','UNROUND_DISCOUNT_VALUE':'8954','DISCOUNT_VALUE':'8954','DISCOUNT_DIFF':'0','DISCOUNT_DIFF_PERCENT':'0','VATRATE_VALUE':'0','DISCOUNT_VATRATE_VALUE':'0','ROUND_VATRATE_VALUE':'0','PRINT_VALUE_NOVAT':'8 954 руб.','PRINT_VALUE_VAT':'8 954 руб.','PRINT_VATRATE_VALUE':'0 руб.','PRINT_DISCOUNT_VALUE_NOVAT':'8 954 руб.','PRINT_DISCOUNT_VALUE_VAT':'8 954 руб.','PRINT_DISCOUNT_VATRATE_VALUE':'0 руб.','PRINT_VALUE':'8 954 руб.','PRINT_DISCOUNT_VALUE':'8 954 руб.','PRINT_DISCOUNT_DIFF':'0 руб.'},'DISPLAY_PROPERTIES':'<dt>Артикул<\/dt><dd>121420<\/dd>','PREVIEW_PICTURE':{'ID':'1040','SRC':'/upload/iblock/b0d/b0d7392d63763601e9b68a348a7ec36f.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/b0d/330_430_1/b0d7392d63763601e9b68a348a7ec36f.jpg','SMALL':'/upload/resize_cache/iblock/b0d/90_90_2/b0d7392d63763601e9b68a348a7ec36f.jpg'},'DETAIL_PICTURE':{'ID':'1040','SRC':'/upload/iblock/b0d/b0d7392d63763601e9b68a348a7ec36f.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/b0d/330_430_1/b0d7392d63763601e9b68a348a7ec36f.jpg','SMALL':'/upload/resize_cache/iblock/b0d/90_90_2/b0d7392d63763601e9b68a348a7ec36f.jpg'},'CHECK_QUANTITY':false,'MAX_QUANTITY':'0','STEP_QUANTITY':'1','QUANTITY_FLOAT':false,'MEASURE':'шт','OFFER_GROUP':false,'CAN_BUY':true,'SLIDER':[{'ID':'1040','SRC':'/upload/iblock/b0d/b0d7392d63763601e9b68a348a7ec36f.jpg','WIDTH':'450','HEIGHT':'369','PREVIEW':'/upload/resize_cache/iblock/b0d/330_430_1/b0d7392d63763601e9b68a348a7ec36f.jpg','SMALL':'/upload/resize_cache/iblock/b0d/90_90_2/b0d7392d63763601e9b68a348a7ec36f.jpg'}],'SLIDER_COUNT':'1'}],'OFFER_SELECTED':'0','TREE_PROPS':[{'ID':'20','SHOW_MODE':'TEXT','VALUES_COUNT':'4'}]})

    Тут как раз есть нужные данные. Вытащите это c помощью IMPORTXML, и распарсите с помощью REGEXEXTRACT
    Ответ написан
    Комментировать
  • Где найти спец-та для разработки прототипа калькулятора в Эксель?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Делайте в Google Sheets. Там можно сразу GAS(=JS) использовать, и потом перенести на сайт будет проще
    Ответ написан
    Комментировать
  • Как в гугл таблицах сделать так, чтобы ячейка прибавляла себя каждый месяц в назначенной дате?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Сделать триггер, который будет брать значение и прибавлять к нему 1000
    function trigger(){
      const delta = +1000;
      let range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1").getRange("A1");
      let oldValue = range.getValue() || 0;
      range.setValue(delta+oldValue);
    };
    Ответ написан
  • Как разъединить слипшиеся предложения с помощью регулярных выражений? словоСлово -> слово. Слово?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    =REGEXREPLACE(A1;"([а-яё])([А-ЯЁ])";"$1. $2")
    Демонстрационная таблица
    Ответ написан
    Комментировать
  • Как построить данный XPath запрос для Google Sheets?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Сделайте сначала импорт всей страницы
    "//*"
    и посмотрите, если ли там вообще эти данные. Скорее всего оно грузится скриптом, и в изначальном HTML его просто нет.
    Если данные есть, кидайте сюда, под спойлер.
    Ответ написан
  • Почему в массив добавляються лишние елементы?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    У меня такой вариант лежит давно:
    /**
     * Уникализирует массив
     *
     * @param {Array} array Исходный массив
     * @return {Array} Массив с уникальными значениями
    */
    function unique(array){
      return array.filter((val, i, arr)=>arr.indexOf(val)===i);
    };
    Ответ написан
    Комментировать
  • Как автоматически архивировать данные с одного листа таблицы на другой?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    1) Сделать триггер на onEdit()
    2) Внутри прописать создание триггера по времени - через 3 дня
    3) В качестве функции - бэкап - копирование нужной строки в лист-архив.

    или

    1) Сделать триггер на onEdit()
    2) Внутри прописать сохранение даты изменения и значения в userPropertyes
    3) Сделать триггер по времени (раз в сутки или чаще) - чтобы сканировал userPropertyes и переносил нужные данные в лист-архив.
    Ответ написан
    Комментировать
  • Как увеличить количество цифровых выходов в Arduino uno?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1 комментарий
  • Подключение нескольких esp01 к блоки питания от пк, как реализовать?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Попробуйте немного нагрузить линии +12 и +5 (жёлтый и красный соответственно) чем-нибудь, например лампочкой. Возможно что уходит в защиту из-за перекоса в нагрузках.
    Или, другой вариант, питать ESP через преобразователь до3,3В, а его попробовать подключать к +5 или к +12, возможно что это поможет.
    Для устранения ВЧ шума - возле каждого потребителя(на его стороне) поставьте керамический конденсатор небольшой, например 0,1мкФ.
    Проверьте модули по отдельности, возможно просто один из них мёртв.

    PS: что за девайс планируется, если не военная тайна?
    Ответ написан
    2 комментария
  • Как сгенерировать случайные числа при определённых условиях?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Генерируйте в диапазоне 0..B1/5, это гарантирует выполнение условия.
    =ЦЕЛОЕ(СЛУЧМЕЖДУ(0;$B$1/5))
    Ответ написан
    6 комментариев
  • Как составить акт-сверки в Эксель?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    ВПР() поможет отцу русской демократии
    Ответ написан
    1 комментарий
  • Как округлить целое число?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    const zeros=6;
    let number = 123456789;
    let ultraRoundNumber = Math.round(number/(10**zeros))*(10**zeros);
    Ответ написан
    Комментировать
  • Excel: Как сделать автозаполнение из повторяющихся, но увеличивающихся дат?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    =$A$1+ЦЕЛОЕ(СТРОКА()/2)
    $A$1 содержит первую дату
    2 - число повторений
    ...и распространить формулу вниз
    Демонстрационная таблица
    Ответ написан
    1 комментарий
  • Как в SUMIFS в критерий выбрать все варианты + вариант отсутствия условия?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Так а в чём вопрос? Всё верно написано.
    Я бы только $$ везде поставил, чтобы не поехала формула при распространении
    Ответ написан
  • Как отправить новую строчку из одной таблицы в другую автоматически и с условием в google sheets?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Если только на чтение, то подойдёт IMPORTRANGE() + FILTER()
    Если ещё и на запись, то делайте скрипт на событие (на редактирование или на отправку формы)
    Ответ написан
    Комментировать
  • Как в выпадающий список добавить вещественные числа?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    1) Если не нужен список значений, а только валидация, то можете использовать свою формулу:
    =ИЛИ(A1=1,1;A1=2,1)
    тут A1="текущая ячейка"
    2) Как уже советовали выше - можно перейти на десятичный разделитель - точку.
    3) Или не переходить на разделитель точку, но данные использовать так:
    =+ПОДСТАВИТЬ(A1;".";",")
    тут A1 - ссылка на ячейку, в которой происходит проверка
    Ответ написан
    Комментировать
  • Что означает и зачем нужен + в начале prompt?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Это - самый простой и короткий способ сконвертировать в число
    Ответ написан
    Комментировать