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

    MiloNNe
    @MiloNNe
    Жаль не взял собой рундук. Сундук для рун - РУНДУК
    В расширенных настройках ставь галку и очистишь все ячейки61cc76fbb3707852298368.png

    И потом выделяешь все пустые ячейки в "Найти и выделить" и удаляшь их со смещем куда надо
    Ответ написан
    Комментировать
  • Какая может быть формула суммы диапазонов у разных листов?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    =arrayformula({
    B2&"!A2:A";
    B3&"!A2:A";
    B4&"!A2:A"
    })

    и т.д.
    Ответ написан
    2 комментария
  • Почему не получается записать в базу данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    База данных всегда сама подробно расскажет, почему у неё не получилось выполнить запрос. Надо её только об этом попросить.

    Поэтому сначала учимся правильно соединяться.
    Весь этот детский лепет "не могу соединиться с БД" выкидываем и пишем нормальный код, который сам, без всяких проверок, сообщит нам об ошибках.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    Здесь первая строчка отвечает как раз за информирование об ошибках

    Кроме того надо не забыть про ошибки РНР
    Во-первых, всегда в коде должно быть error_reporting(E_ALL);
    Плюс на домашнем компе ini_set('display_errors',1);, а на боевом - ini_set('display_errors',0);ini_set('log_errors',1);, и смотреть, соответственно, в логах.

    После этого переписываем запрос. Причем так, чтобы данные в БД всегда попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

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

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

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);

    Здесь за информирование об ошибках отвечает параметр PDO::ERRMODE_EXCEPTION, а остальные просто для удобства/корректности.

    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    2 комментария
  • Как извлечь информацию из конкретных ячеек таблицы файла .docx с помощью python и библиотеки docx?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Чего там понимать?
    from docx import Document
    
    document = Document('document.docx')
    table = document.tables[0]
    cell = table.cell(0, 1)
    print(cell.text)
    Ответ написан
    2 комментария
  • Где посмотреть идеи для проекта OpenSource?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Если часто встречаете вопросы "Что написать" на форумах, то это не значит, что задающие их люди способны что-то написать. Скорее наоборот.
    Уже есть в сети всякие там кикстартеры. шде люди ищут финансирование для своих проектов, а также есть гитхаб, где люди могут собраться в работе над опенсорс-проектом и поработать.
    Если нет какого-то известного сайта, знакомящего разработчиков и пользователей, дающего им пообщаться, то это всего лишь означает. что разговаривать им не о чем.
    Людей на планете дофигища и всем сто-то нужно в той или иной степени. Идей масса, продуктов платных и бесплатных разного качества тоже полно, зато людей, которым вообще пофигу что писать, причем забесплатно, видимо, раз, два и обчелся. Не наберётся их на целую социальную сеть.

    Да и в чем проблема? Вот есть фотошоп - платный и не дешевый, а есть немалая куча "бесплатных аналогов фотошопа". Самый, наверно, известный - это Gimp. Нужен ли кому-то хороший графический редактор - безусловно. Много ли таких людей? Очень! Есть ли опенсорс проекты в этой тематике? Огромное количество!
    А вот с качеством у них так себе, хотя многие вполне юзабельны и во многом спообны аменить хорошие платные аналоги.
    Слышали выражение "Блеск и нищета опенороса"? Вот лучше не скажешь. Огромное кооличество человекочасов работы энтузиастов и штатных программистов, сидящих на своих окладах, пишут очень большое количество открытого кода. Можно садиться и писать любой проект. Нет никакого дефицита проектов и идей. Просто бери и пиши любой ткрытый проект с гитхаба, или любой аналог популярного платного. И тех и других в избытке!

    Зачем делать социальную сеть, которая даёт то. чего и так навалом? Она никому не нужна.

    Да, если нужны идеи проектов, то так и формулируйте вопрос. Огромное количество людей готовы делиться своими идеями. Идей много, без реализации они гроша выеденного не стоят, а на все проекты жизни не хватит их реализовывать, поэтому я совершенно не понимаю почему люди "боятся рассказать свои идеи, чтобы их не украли".
    К примеру я всегда с удовольствием делюсь своими идеями. которых накопилось уже не мало. У меня не хватит никаких ресурсов, чтобы их се реализовать. так что если кто-то какую-то из них "украдёт", я буду только рад, ведь, если повезёт и "ворюга" не просто балабол, а реально что-то может сделать, то я смогу при жизни попользоваться своими поплощенными идеями. Обычно идеи лежат в облатси интересов своих авторов. а значит автор не отказался бы попользоваться их воплощенями.

    Так какой смысл прятать идеи. если выгоднее ими делиться?!
    В общем за идеями приходите, рассказывайте что интересно - накидаем.
    Ответ написан
    Комментировать
  • Как сортировать числа в правильно порядке?

    desaki
    @desaki
    пишу ботов для телеги
    Возможно данная статья поможет вам: ссылка
    В статье говорится о методе sort()

    Скорее всего, вы что-то не так делаете. Покажу пример:
    Если у вас список состоит из чисел, то вывод будет следующим:
    number = [1, 10, 5, 11, 2, 4, 20, 21]
    number.sort()
    Вывод: [1, 2, 4, 5, 10, 11, 20, 21]
    
    Но, если у вас список такой, то вывод будет уже другим:
    number = ['1', '10', '5', '11', '2', '4', '20', '21']
    number.sort()
    Вывод: ['1', '10', '11', '2', '20', '21', '4', '5']

    Думаю, вы поняли, в чем заключалась ваша ошибка
    Ответ написан
    3 комментария
  • Как с помощью формул объединить данные по оплатам клиента в одну строчку финансового календаря для его автоматизации?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Возможно,

    =INDEX(IF(
      VLOOKUP(C6:AG6;{D3:D4\F3:F4};2)>=C6:AG6;
      VLOOKUP(C6:AG6;{D3:D4\C3:C4};2);
    ))


    61c065401ffa7169229125.png

    Обратите внимание, что для большего числа уникальных постояльцев необходимо будет усложнять индекс и условие отбора.

    https://docs.google.com/spreadsheets/d/1tU2tNlqb1r...
    Ответ написан
    Комментировать
  • Как начать Lua?

    BacCM
    @BacCM
    C++ почти с рождения
    tylerneylon.com/a/learn-lua

    А потом сюда

    https://love2d.org/

    там с примерами - можно сразу игрушку писать простенькую, хоть на ПК хоть на андроид
    Ответ написан
    Комментировать
  • Как сделать ВПР по всем листам в Google Таблице?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Сделать триггер, в котором при изменении таблицы будет переписываться формула. В формуле можно получить все данные и тут же сделать ВПР()
    Что-то вроде:
    =arrayformula(i(A2:A="";"";впр(A2:A;{
    Лист1!A:B;
    Лист2!A:B;
    Лист3!A:B
    };0)))
    Ответ написан
    1 комментарий
  • Как в гугл-таблице получить курс токена на текущий момент?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    coinmarketcap можно на одних формулах сделать. Хотя если есть API то быстрее/надёжнее/красивее использовать его.
    =IMPORTXML("https://coinmarketcap.com/ru/currencies/bitcoin/";"//div[contains(@class,'priceValue')]")
    Ответ написан
    4 комментария
  • Как в гугл-таблице получить курс токена на текущий момент?

    idShura
    @idShura
    1. Разбираетесь с API
    https://www.coingecko.com/ru/api/documentation

    Пример:

    Получаете список coins и находите id нужных криптовалют
    https://api.coingecko.com/api/v3/coins/list
    [
        {
            "id": "01coin",
            "name": "01coin",
            "symbol": "zoc"
        },
        {
            "id": "bitcoin",
            "name": "Bitcoin",
            "symbol": "btc"
        }
    ]


    Пример получения курса Bitcoin в rub и usd
    https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=rub%2Cusd


    2. Устанавливаете ImportJSON в google sheets
    ImportJSON

    3. Ипортируете данные
    =ImportJSON("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=rub%2Cusd"; "/bitcoin/usd";)


    61b97696dea36789907526.png

    Пример Google sheets
    Ответ написан
    Комментировать
  • Как сгенерировать случайное слово из диапазона в ячейке рядом?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    В С2:
    =ЕСЛИ(ИЛИ(C1="";ISFORMULA(C1));"";ИНДЕКС($B$1:$B$19;1+ЦЕЛОЕ(СЛЧИС()*СЧЁТЗ($B$1:$B$19))))

    ...и распространить вниз
    Ответ написан
    Комментировать
  • Есть ли смысл изучать мобильную разработку в ближайщие 10 лет?

    @evgeniy_lm
    Прочитайте рассказ А. Азимова "Профессия" там ответ на ваш вопрос
    Ответ написан
    1 комментарий
  • Как выполнить такое условие?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Вам нужен VLOOKUP, например,

    =INDEX(IFERROR(VLOOKUP(A1:A8;D1:E4;2;0)))

    61a3437e2ecbe486375764.png

    Пример в Таблице https://docs.google.com/spreadsheets/d/1xGKClhD7M6...
    Ответ написан
    1 комментарий
  • Почему не работает переход из excel по гиперссылкам? Как исправить?

    @A1f
    Такое случается, если файл предоставлен в общий доступ нескольким пользователям. При отключении доступа ссылки начинают работать.
    Причину надо узнавать в Microsoft.
    Ответ написан
    Комментировать
  • Как суммировать определенные ячейки, закрашенные цветом?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Можно как-нибудь так. Чтобы указывать нормальные диапазоны, можно парсить аргументы функции, но так надёжнее. С полученными данными можно делать что угодно. Если нужна сумма - оберните в СУММ()
    function filterByColor(dataRangeName, colorRangeName) {
      let ss = SpreadsheetApp.getActiveSpreadsheet();
    
      let colorRange = ss.getRangeByName(colorRangeName);
      let color = colorRange.getBackground();
    
      let dataRange = ss.getRangeByName(dataRangeName);
      let data = dataRange.getValues();
      let colors = dataRange.getBackgrounds();
    
      return data.map((row,ri)=>row.map((val,ci)=>color===colors[ri][ci]?val:""));
    }

    Демонстрационная таблица
    Ответ написан
    Комментировать
  • Почему Query в Google Spreadsheets возвращает строку не соответствующую запросу?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    На самом деле формула возвращает все верно - заголовок пустого результата своей работы.

    Чтобы обрезать этот заголовок, нужно использовать третий аргумент QUERY(;;0)

    Обратите внимание, что если QUERY вернет больше одного ответа, то будет ошибка. Выбор этой формулы в этих обстоятельствах неудачный.

    Но все же, нужно привести дату C2 к нужному формату =date '"&TEXT(C2;"yyyy-MM-dd")&"'

    =IFNA(
      QUERY(
        'Sales Data'!A:Q;
        "Select P where (F=0 and A="&A2&" and O=date '"&TEXT(C2;"yyyy-MM-dd")&"')";
        0
      );
    )


    619efef8f1487750037542.png
    Ответ написан
    1 комментарий
  • Как скопировать конкретное слово/значение из текста одной ячейки и вставить в конкретное место текста другой ячейки?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Полагаю, что вы очень сильно поспешили с вопросом.

    Хороший вопрос - половина решения.

    К примеру, возьмем решение с подстановкой через регулярное выражение

    Регулярное выражение
    .*?shipid:([^\/]+).*?mmsi:([^\/]+).*?imo:([^\/]+).*?vessel:([^\/]+).*?


    Строка-подстановка
    www.myshiptracking.com/vessels/$4-mmsi-$2-imo-$3

    Из исходной строки
    www.marinetraffic.com/ru/ais/details/ships/shipid:4643053/mmsi:477636800/imo:9751327/vessel:NING_JING_HAI/


    должно получиться
    www.myshiptracking.com/vessels/NING-JING-HAI-mmsi-477636800-imo-9751327


    Можно использовать формулу
    =REGEXREPLACE(B9,B3,D3)

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

    619daf24d4434991008817.png

    А вот и пример с Таблицей https://docs.google.com/spreadsheets/d/1WHKGbcyRc1...
    Ответ написан
    Комментировать
  • Как сделать флажок, который зачеркивает?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Вам нужно добавить условное форматирование

    6197bb8f5ace7385624375.png

    Пример в Таблице https://docs.google.com/spreadsheets/d/1-BK1VAbPjm...
    Ответ написан
    1 комментарий