Ответы пользователя по тегу Google Docs
  • Как отредактировать скрипт, чтобы он подставлял данные из Таблицы в Документ?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Предлагаю использовать универсальную функцию заполнения документа

    /**
     *
     * @param {GoogleAppsScript.Document.Document} doc
     * @param {Record<string,unknown>} data
     */
    function fillDoc_(doc, data) {
      const body = doc.getBody();
    
      Object.entries(data).forEach(([key, value]) => {
        body.replaceText(`(?i){{${key}}}`, value);
      });
    
      body.replaceText(`(?i){{.*?}}`, '');
    }


    Теперь вы можете поставить в эту функцию Документ, например, вот так создается новый файл из шаблона

    const file = DriveApp.getFileById('192avJeIyh524ofvFvuQRaf9QPyqH7FKBEzwNLoHJa-g').makeCopy();
    const doc = DocumentApp.openById(file.getId());


    Важно, заменяемый текст в шаблоне должен быть обернут в {{заменяемый текст}}.


    Так же нужно создать объект данных для функции. Например, вот так

    const values = SpreadsheetApp.getActive()
      .getRange("'Заполнение Документа данными из Таблицы'!2:2")
      .getDisplayValues()[0];
    const data = {
      заголовок: 'тестовый заголовок',
      имя: values[1],
    };


    Вызов функции прост

    fillDoc_(doc, data);

    Полный пример шаблона тут https://docs.google.com/document/d/192avJeIyh524of...

    Полный пример в Таблице https://docs.google.com/spreadsheets/d/1zPuzdN7EtT...
    Ответ написан
    Комментировать
  • Как написать свой аналог DOCS в Yii2?

    oshliaer
    @oshliaer
    Google Products Expert
    Скорее всего вам нужен "rich text editor". Не забывайте в поисковике добавлять "open source". Из реально хороших, которые работают

    1. https://quilljs.com/playground/
    2. https://editorjs.io/


    На Yii2 такие вещи не делаются, но обслуживаются.
    Ответ написан
    Комментировать
  • Можно ли как-то автоматически переносить все диаграммы с google forms в google docs?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Нет. Сервис генерации статистики недоступен.

    Но такие графики легко можно написать самому в той же Таблице, потом переносить в Документ одним из общих способов.
    Ответ написан
    Комментировать
  • Apps script Как скрыть {текст} в кавычках, при условии что данные в гугл таблицы отсутствуют?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    В конце всего вместо этого

    body.replaceText("{Фамилия Имя Отчество}", "");
    body.replaceText("{Космодемьянская д. 13 кв. 29}", "");
    body.replaceText("{1111 111111}", "");
    body.replaceText("{почта}", "");
    body.replaceText("{01.01.2000}", "");
    
    body.replaceText("{Фамилия Имя Отчество}", "");
    body.replaceText("{Космодемьянская д. 13 кв. 29}", "");
    body.replaceText("{2222 333333}", "");
    body.replaceText("{мясо}", "");
    body.replaceText("{01.01.2222}", ""); 
    
    body.replaceText("{ДР33.33.3333}", "");
    body.replaceText("{сок}", "");
    body.replaceText("{хлеб}", "");
    body.replaceText("{номер телефона}", "");
    body.replaceText("{адрес}", "");
    body.replaceText("{1 телефон}", "");
    body.replaceText("{2.Фамилия Имя Отчество}", "");
    body.replaceText("{2 телефон}", "");


    Просто вызовите это

    body.replaceText('{.*?}', '');

    Это удалит все неиспользованные шаблоны.
    Ответ написан
    Комментировать
  • Как обновить размер файла Google Document?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Файлы не обновляют информацию о себе сразу. Необходимо подождать какое-то время. Плюс, картинки учитываются как-то странно. Я наблюдаю, что хранится некий кеш даже удаленных изображений.

    Еще проверьте историю версий. Можно ли оттуда что-то удалить?

    Было бы интересно посмотреть на файл в 80Мб. Там какая-то картинка, которая вам все портит, это не похоже на текст.
    Ответ написан
    Комментировать
  • Как заставить importxml подсчитать количество символов в google docs word?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    К сожалению, так не получится.

    Нужно сделать отдельный скрипт и опубликовать его как веб-приложение. Потом вызывать его в формуле

    =IMPORTDATA("https://script.google.com/macros/s/AKfycbzMBdr9yLrFPTOiRdEAr-2tHp4vkTasa6t8ME9_yxFDwCqQqg-JZEOQDHTvfrde7ahM/exec?fileId=" & C3)


    C3 - ID Документа

    63d12c19b28e8891023004.png

    Пример и ссылки на код в Таблице.

    Если вы захотите посчитать количество слов в вашем фале через мой скрипт, то ваш файл должен быть доступен для всех по ссылке как минимум на чтение.
    Ответ написан
    Комментировать
  • Как скопировать Таблицу из Google Sheets в Google Docs?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Может быть просто вставите связанные Таблицы? К сожалению, пока автоматизировать этот процесс нельзя, но сама связка работает и обновляется автоматически. Форматированеи сохраняется.

    Пример https://docs.google.com/document/d/1BNLG4f8Z_LSGch...

    Справка https://support.google.com/docs/answer/7009814?hl=...

    62d68e9a568a3296105785.png
    Ответ написан
    2 комментария
  • Как конвертировать формат изображений внутри документа Google Docs?

    oshliaer
    @oshliaer
    Google Products Expert
    Скорее всего никак. Сервис сам принимает решения в каком формате сохранять изображения. Зависит от размера и целей оптимизации, которые выбираются автоматически.

    Тут обсуждается техника работы с картинками через Apps Script https://oshliaer.github.io/qna?target=post/how-to-...
    Ответ написан
    Комментировать
  • Как добавить связку данных таблиц в Confluence с данными на других страницах?

    oshliaer
    @oshliaer
    Google Products Expert
    blabs, однозначного ответа, скорее всего нет. Я бы предположил, что документация должна идти к коду при разработке и от кода - при поддержке. Т.е. в конечном итоге сначала у вас есть ТЗ на которое ссылается Confluence (оставаясь точкой отправления), а потом у вас есть код с должным набором комментариев и документов в самой кодовой базе, на которые Confluence ссылается как на результат работы, а код ссылается на некоторые паблики (например, статьи дополнительных описаний).

    Автоматизировать в этом месте можно до потери пульса. Тут главное не стараться ради стараний. Поэтому, если бы я выбирал, то остался с Документами Гугл на уровне вводного описания и абстракции.

    Пример проблемной автоматизации. Вот эта страница https://oshliaer.github.io/qna?target=labs/apps-sc... генерируется из Документа Гугл. И все бы ничего, но только вначале это был небольшой скрипт на 5 строк в Apps Script, а теперь это приложение на Go, которое еще и контрибьютить иногда хочется. Как вообще такое получилось!? я уже сказать не могу, но то, что это были большие переоцененные надежды на Документы Гугл - факт. Т.е. вы рискуете нарваться на автоматизацию того, что вам вообще не нужно.

    Я бы Jire ничего не предпочел, но добавил бы документацию REST в OpenAPI с предложениями на изменения через git с реверс ссылками на паблик, генерируемый в Confluence. Плюс такого подхода в полнейшей и тотальной уже готовой автоматизации (подкрутить пару Docker конфигов) вплоть до тестов, проверки типов и кросс-ссылок. Обратите внимание, что ссылки должны иметь общий характер. Или же необходимо просто встроить файлы репозитория в нужный контекст статьи.

    Применимо ли это к вашим задачам миграции - это отдельный вопрос. Возможно, там какие-то невероятные многоходовки, которые просто невозможно указать в комментариях в коде OpenAPI. Тогда тут нужен более системный подход. Возможно, хранение и связывание большого количества параметров через Гугл Таблицы (используя их как первоисточник) будет как-то оправдано.
    Ответ написан
    Комментировать
  • Как получить получить текст Гугл Документа?

    oshliaer
    @oshliaer
    Google Products Expert
    Вероятно, самый простой способ получить текст Документа - это использовать Google Drive API.

    Метод
    GET https://www.googleapis.com/drive/v3/files/fileId
    возвращает список возможных экспортов

    {
      "exportLinks": {
        "application/rtf": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=rtf",
        "application/vnd.oasis.opendocument.text": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=odt",
        "text/html": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=html",
        "application/pdf": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=pdf",
        "application/epub+zip": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=epub",
        "application/zip": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=zip",
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=docx",
        "text/plain": "https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=txt"
      }
    }


    Для своего файла с id "ABC" авторизуйтесь с правами https://www.googleapis.com/auth/drive.readonly, и вызовите

    GET https://docs.google.com/feeds/download/documents/export/Export?id=ABC&exportFormat=txt
    Ответ написан
    Комментировать
  • Есть ли горячие клавиши для действий в подсказке неправильного слова?

    oshliaer
    @oshliaer
    Google Products Expert
    Насколько я знаю, есть только проверка всего текста через [CTRL]+[ALT]+[X]. Не очень интуитивно, но по табам переходит нормально. Ignore можно сделать за 2 клика.

    Другой вариант, использовать стандартное сочетание [SHIFT]+[F10] для вызова контекстного меню [ПКМ].
    Ответ написан
    Комментировать
  • Как в гугл документе сделать защищенные абзацы/строки/диапазоны?

    oshliaer
    @oshliaer
    Google Products Expert
    К сожалению, такой возможности нет.

    Но вы можете отправить предложение по улучшению непосредственно из меню помощи приложения.

    Они точно читают.
    Ответ написан
    Комментировать
  • Экспорт данных из гугл таблицы в гугл документы. Возможно?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Слишком общий вопрос.

    Ищите примеры заполения шаблонов из Таблиц Google.

    Основная идея изложена тут. Вам достаточно передавать данные из Таблицы в функцию примера.

    Синхронизация в обратную сторону намного сложнее.
    Ответ написан
  • Как настроить автозамену кавычек " на "" ‎ в Google Docs?

    oshliaer
    @oshliaer
    Google Products Expert
    Вот набор, который я использую

    “”«»

    Работает не со всеми шрифтами.
    У автозамены есть фатальный недостаток - она требует ввода символа, отличного от цифры или буквы, например, пробел или ввод. Поэтому ввод открывающейся елочки сопряжен с раздражающей привычкой лишний раз клацать пробел.

    5dd984daf0d3b992806879.gif

    Или поставьте себе раскладку Бирмана https://ilyabirman.ru/projects/typography-layout/ под Windows.
    Ответ написан
    Комментировать
  • Как изменить отображение конца страницы в Google Docs?

    oshliaer
    @oshliaer
    Google Products Expert
    Переключитесь в режим предварительного просмотра Меню Документа - Вид - Предварительный просмотр

    5dd2b3038d359461098488.png
    Ответ написан
  • В чем проблема со скриптом импорта данных из гугл таблицы в гугл док?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    У моего линтера кукушку чуть не оторвало. Он даже подумал, что это не JS. Ваш код не валиден для интерпретатора Google Apps Script. Вот форматированный, но непроверенный код

    /* eslint-disable require-jsdoc */
    /* eslint-disable no-undef */
    
    function doAction() {
      var result = readBaseData('22-05-2019');
      // If found data for this date...
      if (result != null) {
        var doc = createNewDoc(' iskovoe ' + result[0][0]);
        fillTemplate(doc, result);
      }
    }
    // inDoc - its a empty template, inData - data for filling template
    function fillTemplate(inDoc, inData) {
      // Getting count of files in folder
      var NUM = DocsList.getFolderById(
        '1a3uCa9wRyOzio-C7FVacOykuLoxCqTs3'
      ).getFiles().length;
    
      // Replace masks (Don't work [NUM] or $NUM or something else)
      inDoc.replaceText(
        'x',
        'https://docs.google.com/spreadsheets/d//edit#gid=0...'
      );
      inDoc.replaceText(
        'x',
        'https://docs.google.com/spreadsheets/d//edit#gid=0...'
      );
      inDoc.replaceText(
        'x',
        'https://docs.google.com/spreadsheets/d//edit#gid=0...'
      );
      inDoc.replaceText(
        'x',
        'https://docs.google.com/spreadsheets/d//edit#gid=0...'
      );
    
      // get first table in document
      var table = curDoc.getTables()[0];
      for (i = 0; i < inData.length; i++) {
        var row = table.appendTableRow();
        row.appendTableCell(inData[i][1]);
        row.appendTableCell(inData[i][2]);
      }
      curDoc.saveAndClose();
    }
    function createNewDoc() {
      // Making copy of blank file
      var blankDoc = DocsList.getFileById(
        '19vYiThaKdgQ6eeiRg5nPewzP_Eab7nkLUwyt49jCC1Q'
      ).makeCopy(iskovoe);
      blankDoc.addToFolder(
        DocsList.getFolderById('1a3uCa9wRyOzio-C7FVacOykuLoxCqTs3')
      );
    
      // return working doc and table base
      return (curDoc = DocumentApp.openById(blankDoc.getId()));
    }
    // get range and sort only for day from parameter
    function readBaseData(inDate) {
      var ssDoc = SpreadsheetApp.openById(
        '1ZCNO6Iae2RwDdKAlQX6TF5mpp4xHHB4v1mXK233uJls'
      ).getActiveSheet();
    
      // get filled range
      var data = ssDoc.getDataRange().getValues();
    
      // create new array with data to inDate,
      // for start from 1 because first row is text column headers
      var filteredData = new Array([]);
      for (i = 1; i < data.length; i++) {
        data[i][0] = convertDate(data[i][0]);
        if (data[i][0] == inDate && data[i][3] == 1) {
          filteredData[i - 1] = data[i];
        }
      }
      return filteredData;
    }


    Что к чему и как - лучше описать в техническом задании и обратиться к специалисту.
    Ответ написан
    Комментировать
  • Поиск по содержанию во всех Документах Google?

    oshliaer
    @oshliaer
    Google Products Expert
    Да, вы можете использовать поиск по Диску Google с уточнением типа файла. Например, ссылка ниже ищет слово "для" во всех Документах на Диске

    https://drive.google.com/drive/search?q=type:document%20%D0%B4%D0%BB%D1%8F


    Перейти https://drive.google.com/drive/search?q=type:docum...
    Ответ написан
    Комментировать
  • Возможно ли вывести содержимое DOC файла через docs.google.com/viewer?url в iframe?

    oshliaer
    @oshliaer
    Google Products Expert
    Необходимо добавить обязательный параметр embedded=true

    <iframe src="https://docs.google.com/viewerng/viewer?url=https://cit.tsn.47edu.ru/doc/Programma_provedenia_regionalnykh_UTS_24_11_2018.docx&embedded=true">
    </iframe>


    Ну, и как альтернатива, нативный вьювер для этого формата

    <iframe src="https://view.officeapps.live.com/op/embed.aspx?src=https://cit.tsn.47edu.ru/doc/Programma_provedenia_regionalnykh_UTS_24_11_2018.docx">
    </iframe>
    Ответ написан
    2 комментария
  • Как убрать отступы в Google Docs?

    oshliaer
    @oshliaer
    Google Products Expert
    Существует минимальный зазор от верхней границы страницы до первой таблицы, который равен одному абзацу плюс два по одному расстояния между строками текста.

    Пример того, как это можно настроить https://www.facebook.com/oshliaer/videos/210600687...

    Снизу можно также удалить границу.
    Ответ написан
    Комментировать
  • Как импортировать количество лайков на ютубе?

    oshliaer
    @oshliaer
    Google Products Expert
    Вариант с гашением ошибки

    =IFERROR(IMPORTXML("https://www.youtube.com/watch?v=EJVSx6CUFFc";
                       "(//*[contains(@class,'like-button-renderer-like-button')])[1]");0)


    Вариант с обработчиком ошибки

    =IF(
      ISNA(IMPORTXML("https://www.youtube.com/watch?v=EJVSx6CUFFc";
                     "(//*[contains(@class,'like-button-renderer-like-button')])[1]"));
      0;
      IMPORTXML("https://www.youtube.com/watch?v=EJVSx6CUFFc";
                "(//*[contains(@class,'like-button-renderer-like-button')])[1]")
    )
    Ответ написан
    Комментировать