Задать вопрос
  • Как сделать Сокращение Полного Фио до первых букв на языке VBA?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Function ShortName(fullName As String) As String
      Dim arrNames As Variant
      arrNames = Split(fullName)
      ShortName = arrNames(0) & " " & Left(arrNames(1), 1) & "." & Left(arrNames(2), 1) & "."
    End Function
    Ответ написан
    3 комментария
  • Google apps script Exception: Address unavailable?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    WB блокирует IP гугла. Но это не точно, читал мельком недавно в профильных чатах.
    Ответ написан
    Комментировать
  • Как с помощью importxml узнать, что объявление на авито снято с продажи?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Сайты подобной тематики и сложности не очень-то и любят парсинг. Уверен, что данные получаются отдельным запросом. Отключите JS в браузере и проверьте что отдаёт страница. Или вместо запроса в IMPORTXML поставьте звёздочку - вывалится список всех нод. Или ещё вариант:
    /**
    * Открывает URL и возращает код страницы
    * Telegram - @ProgrammerForever
    *
    * @param {string} URL URL который нужно открыть
    * @param {boolean} isCut Указывакт, нужно ли обрезать страницу до 50000 символов по длине, по умолчанию false
    * @param {boolean} noScript Указывакт, нужно ли удалять скрипты из кода
    * @return Исходный код страницы
    * @customfunction
    */
    function getHTML(URL,isCut,noScript) {
      if ((URL === undefined)||(URL == "")) { return "#ОШИБКА Пустой URL";};
      if (isCut === undefined) {var isCut=true;};
      if (noScript === undefined) {var noScript=true;};
      if (URL.map){     //Если задан диапазон
        return URL.map(getHTML);
      }else{
        try {
          var payload = {
            'rand':(new Date()).getTime()
          };
          var headers={
            'Connection': 'keep-alive',
            'Cache-Control': 'max-age=0',
            'Upgrade-Insecure-Requests': 1,
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'
          };
          var options = {
            'method' : 'get',
            'headers' : headers,
            'payload': payload
          };
          
          var response = UrlFetchApp.fetch(URL,options);
          var charset=response.getAllHeaders["charset"];
          //var responseText=response.getContentText(charset?charset:"windows-1251");
          var responseText=response.getContentText(charset?charset:"UTF-8");
          if (noScript){ 
            responseText=responseText.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/gmi,"");
            responseText=responseText.replace(/<!--.*?-->/gmi,"");
            responseText=responseText.replace(/<link.*?\/>/gmi,"");
            responseText=responseText.replace(/<meta.*?\/>/gmi,"");
            responseText=responseText.replace(/[\n\r\t]/gmi,"");
            
          };
          if (isCut&&(responseText.length>50000)){return responseText.substring(0,50000);}else{return responseText;};
        } catch (err) {
          //return JSON.stringify(err);
          return "#ОШИБКА "+err.message;
        };
      };
    };
    Ответ написан
    Комментировать
  • Как задать номер ячейки формулой?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    =ДВССЫЛ("'БД'!B"&ПОИСКПОЗ(A2;'БД'!A:A;0))
    Но, скорее всего, можно обойтись обычным ВПР()
    Ответ написан
    Комментировать
  • Как изменить приватное сообщение?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Код доходит до;
    if (interaction.customId === 'one') {
    и проходит дальше, не заходя внутрь; далее доходит до:
    if (interaction.customId === 'two') {
    выполняется условие, заходит в if, а там нежданчик:
    mes.edit('новый текст');
    mes не определён нигде ранее.
    Ответ написан
  • Нужен ли корпус или плата для данной схемы?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Объёмный монтаж вполне себе вариант ,занимает минимум места, но надо всё изолировать хорошо.
    Можно припаять провода и всё обжать термоусадкой, провода подключить через клеммники.
    Можно спаять на макетной плате, стоит копейки.
    Ответ написан
    Комментировать
  • Как сделать автоматическое заполнение даты при изменении ячейки «статуса»?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Судя по скрину - нужен отлов события отпрвки формы. Делаете функцию onFormSubmit(event), назначаете триггер на отправку формы, внутри функции проверяете данные и правите нужные ячейки. Только непонятно, зачем править данные ответов с формы.
    Если данные всё-таки меняются вручную, то нужно делать то же самое, только используя триггер onEdit(event).
    Ответ написан
  • Как правильно парсить цены на предметы Steam в Google Sheets при помощи Google Apps Script?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    1) Если есть массив url, то лучшим вариантом будет использование fetchAll
    2) Если получилась ошибка - можно подождать 2**i секунд и повторить запрос. i - номер итерации.
    Ответ написан
  • Как сделать чередование цветов строк через макрос для непустых строк дипазона?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    spreadsheet.getRange('A5:M35') >> spreadsheet.getDataRange()
    Ответ написан
    Комментировать
  • Как сделать плавный поворот камеры в three.js?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Сделайте targetPosition и приближайтесь к ней постепенно. Например, по 5% разницы текущего положения и targetPosition за шаг, пока расстояние не станет меньше какого-то минимального заданного или по количеству шагов - тогда можно установить конечную позицию и остановить таймер.
    Ответ написан
    Комментировать
  • Почему не работает Math.floor()?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    a /= b;
    a = Math.floor(a*100)/100;
    Ответ написан
    Комментировать
  • Как удалять строчки по истечению времени?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    const currentTime = new Date().getTime();
    содержит и дату и время.
    20:59 скорее всего - только время.
    Чтобы оставить только время, можно сделать как-то так:
    new Date() - new Date().setHours(0,0,0,0)
    Ответ написан
    Комментировать
  • Возможно ли извлечь данные через =IMPORTXML с Wildberries?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Не уверен что можно, а если можно, что это хорошая идея. Вёрстка меняется периодически и данные слетают.
    Для этого разработан официальный API, через него можно забирать почти всё что душа пожелает. В реальной работе парсинг WB страниц тоже используется, но не как основной метод.
    Если сильно хочется - посмотрите что видит гугл, когда запрашивает данные

    /**
    * Открывает URL и возращает код страницы
    * Telegram - @ProgrammerForever
    *
    * @param {string} URL URL который нужно открыть
    * @param {boolean} isCut Указывакт, нужно ли обрезать страницу до 50000 символов по длине, по умолчанию false
    * @param {boolean} noScript Указывакт, нужно ли удалять скрипты из кода
    * @return Исходный код страницы
    * @customfunction
    */
    function getHTML(URL,isCut,noScript) {
      if ((URL === undefined)||(URL == "")) { return "#ОШИБКА Пустой URL";};
      if (isCut === undefined) {var isCut=true;};
      if (noScript === undefined) {var noScript=true;};
      if (URL.map){     //Если задан диапазон
        return URL.map(getHTML);
      }else{
        try {
          var payload = {
            'rand':(new Date()).getTime()
          };
          var headers={
            'Connection': 'keep-alive',
            'Cache-Control': 'max-age=0',
            'Upgrade-Insecure-Requests': 1,
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'
          };
          var options = {
            'method' : 'get',
            'headers' : headers,
            'payload': payload
          };
          
          var response = UrlFetchApp.fetch(URL,options);
          var charset=response.getAllHeaders["charset"];
          //var responseText=response.getContentText(charset?charset:"windows-1251");
          var responseText=response.getContentText(charset?charset:"UTF-8");
          if (noScript){ 
            responseText=responseText.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/gmi,"");
            responseText=responseText.replace(/<!--.*?-->/gmi,"");
            responseText=responseText.replace(/<link.*?\/>/gmi,"");
            responseText=responseText.replace(/<meta.*?\/>/gmi,"");
            responseText=responseText.replace(/[\n\r\t]/gmi,"");
            
          };
          if (isCut&&(responseText.length>50000)){return responseText.substring(0,50000);}else{return responseText;};
        } catch (err) {
          //return JSON.stringify(err);
          return "#ОШИБКА "+err.message;
        };
      };
    };


    Или в IMPORTXML поставить * в запросе
    Ответ написан
    Комментировать
  • Получить массив уникальных значений?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Object.values(array.reduce((acc,val)=>(acc[val.itemUniqId]=val,acc),{}))
    Ответ написан
    Комментировать
  • Увеличить столбцы не меня данные в Power Point?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Разница между самым большим и самым маленьким тут в 100 раз, и диаграмма рисуется верно. Для таких рахношёрстных данных надо использовать логарифмическую шкалу.
    Ответ написан
    Комментировать
  • Как сделать формулу суммирования цветной ячейки?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Для Google:
    /**
     * Функция возвращает сумму ячеек в диапазоне с цветом фона равным color
     * @param {Any[][]} range - Диапазон ячеек
     * @param {String} color - цвет фона ячеек
     * @return {Number} сумма ячеек в диапазоне с цветом фона равным color
     */
    function sumByBackgroundColor(range, color) {
      const values = range.getValues();
      const backgrounds = range.getBackgrounds();
      
      let sum = backgrounds.reduce((acc, row, ri) => {
      return row.reduce((acc, c, ci) => {
          if (c === color) {
            return acc + values[ri][ci];
          }
          return acc;
        }, acc);
      }, 0);
      
      return sum;
    }

    Для Excel:
    Public Function SumCellsByColor(rng As Range, clr As Long) As Double
        Dim cell As Range
        Dim colSum As Double
        colSum = 0
        For Each cell In rng
            If cell.Interior.ColorIndex = clr Then
                colSum = colSum + cell.Value
            End If
        Next cell
        SumCellsByColor = colSum
    End Function
    Ответ написан
    1 комментарий
  • Как сделать чтобы в Excel проводилась нижнее подчеркивание только в нужных местах?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    $objPHPExcel = PHPExcel_IOFactory::load('myExcelFile.xlsx');
    $objWorksheet = $objPHPExcel->getActiveSheet();
    
    $lastRow = $objWorksheet->getHighestRow();
    
    for ($row = 1; $row <= $lastRow; $row++) {
        $currentValue = $objWorksheet->getCell('A' . $row)->getValue();
        $nextValue = $objWorksheet->getCell('A' . ($row + 1))->getValue();
        
        if ($currentValue != $nextValue) {
            $objWorksheet->setCellValue('A' . $row, $currentValue . '_');
        }
    }
    
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('myExcelFile.xlsx');
    Ответ написан
    Комментировать
  • Изменение даты в таблице через openpyxl?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    date = sheet['A1'].value
    new_date = date + datetime.timedelta(days=5)
    sheet['A1'].value = new_date
    Ответ написан
  • Какие есть инструменты или библиотека js, чтоб открывать в своем приложении XLS (EXCEL) файлы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Ищите по словосочетанию xslx+js. Будет куча вариантов:
    XLSX.js
    SheetJS.js
    ExcelJS.js
    js-xlsx
    ...
    Ответ написан
    Комментировать