Создать документ с помощью скрипта по функции - PullRequest
0 голосов
/ 11 апреля 2020

Есть ли способ создать документ Google (с включенным скриптом!) С помощью функции скрипта Google? У меня есть Google Spreadsheet, в котором у меня есть пункт меню, который позволяет мне создать документ с таким кодом:

var row = SpreadsheetApp.getActiveSheet().getActiveCell().getRow()
var col = 3
var titletranslation = SpreadsheetApp.getActiveSheet().getRange(row, col).getValue()
var translation = Browser.inputBox(titletranslation , 'Please enter the translation here', Browser.Buttons.OK_CANCEL)
var ss = SpreadsheetApp.getActiveSpreadsheet()
doc = DocumentApp.create(translation);
SpreadsheetApp.getActiveSheet().getRange(row, 6).setValue(doc.getUrl())

Теперь я хочу встроить, что у документа есть собственный сценарий, но я не Не удается добавить сценарий с помощью другого сценария в созданный документ. Кто-нибудь знает, возможно ли это и как?

Заранее спасибо!

1 Ответ

0 голосов
/ 13 апреля 2020

Есть несколько вещей, которые вы должны установить, чтобы достичь своей конечной цели. Я перечислю их, чтобы вы могли следить за ними шаг за шагом:

1) В вашем проекте скриптов приложений go до Просмотр -> Показать файл манифеста .

2) Откройте появившийся файл appscript.json и вставьте его:

{
  "timeZone": "Europe/Paris",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.projects",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/documents",
    "https://www.googleapis.com/auth/spreadsheets"
  ]
}

3) Go в Google Cloud Platform и скопируйте Номер проекта

4) В вашем проекте Apps Script Go до Ресурсы -> Проект Cloud Platform , вставьте ранее скопированный Номер проекта и нажмите Установить проект .

5) Теперь используйте этот код, я предоставлю вам и объясню его функции:

Функция main получит и установит значения листа. Обратите внимание, что я также добавил в код глобальную переменную JSON для построения запросов к API скриптов приложений

// JSON for the requests 
var options = {
  'headers': { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}`},
  'contentType': 'application/json',
  'method': '',
  'payload': ''
};

// This is the main function to run 
function main() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveCell().getRow();
  var titleTranslation = sheet.getRange(row, 3).getValue();
  var translation = Browser.inputBox(titleTranslation , 'Please enter the translation here:', Browser.Buttons.OK_CANCEL);
  var docUrl = createDocwithCode(translation);
  sheet.getRange(row, 6).setValue(docUrl);  
}

createDocwithCode позволит вам создать проект скриптов приложений который будет связан с вашим Do c.

// This will create the doc and link an Apps Script project
function createDocwithCode(translation){
  var doc = DocumentApp.create(translation);
  // Make a POST request with a JSON payload.
  options['method'] = "post";
  options['payload'] = JSON.stringify({ 'title': doc.getName(), 'parentId': doc.getId()});
  // Call the Apps Script API -> Method: projects.create
  var res = UrlFetchApp.fetch('https://script.googleapis.com/v1/projects', options);
  addCodeToDoc(JSON.parse(res.getContentText()));
  return doc.getUrl();
}

. addCodeToDoc заполнит недавно созданный код скрипта приложения требуемым содержимым.

// Fill the previously Created Apps Script project with content 
function addCodeToDoc({scriptId, title}){
  // Make a PUT request with a JSON payload.
  options['method'] = "put";
  options['payload'] = JSON.stringify({ 
    "files": [
    {
      "name": title.replace(/\s+/g, ''),
      "type": "SERVER_JS",
      "source": createFunctionForDoc()
    },
    {
      "type": "JSON",
      "name": "appsscript",
      "source": "{\n  \"timeZone\": \"Europe/Paris\",\n  \"dependencies\": {\n  },\n  \"exceptionLogging\": \"STACKDRIVER\"\n}"
    } 
  ]
  })
  // Call the Apps Script API -> Method: projects.updateContent
  UrlFetchApp.fetch(`https://script.googleapis.com/v1/projects/${scriptId}/content`, options);
}

Наконец, createFunctionForDoc - это функция для простого написания будущего кода в недавно созданном коде скрипта приложений.

// Fill The Script with your desired funtions                     
function createFunctionForDoc(){
    return `
      function customFunction(){
        Logger.log("Hello World");
      }
    `
}

Весь ваш код будет выглядеть так:

// JSON for the requests 
var options = {
  'headers': { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}`},
  'contentType': 'application/json',
  'method': '',
  'payload': ''
};

// This is the main function to run 
function main() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveCell().getRow();
  var titleTranslation = sheet.getRange(row, 3).getValue();
  var translation = Browser.inputBox(titleTranslation , 'Please enter the translation here:', Browser.Buttons.OK_CANCEL);
  var docUrl = createDocwithCode(translation);
  sheet.getRange(row, 6).setValue(docUrl);  
}


// This will create the doc and link an Apps Script project
function createDocwithCode(translation){
  var doc = DocumentApp.create(translation);
  // Make a POST request with a JSON payload.
  options['method'] = "post";
  options['payload'] = JSON.stringify({ 'title': doc.getName(), 'parentId': doc.getId()});
  // Call the Apps Script API -> Method: projects.create
  var res = UrlFetchApp.fetch('https://script.googleapis.com/v1/projects', options);
  addCodeToDoc(JSON.parse(res.getContentText()));
  return doc.getUrl();
}

// Fill the previously Created Apps Script project with content 
function addCodeToDoc({scriptId, title}){
  // Make a PUT request with a JSON payload.
  options['method'] = "put";
  options['payload'] = JSON.stringify({ 
    "files": [
    {
      "name": title.replace(/\s+/g, ''),
      "type": "SERVER_JS",
      "source": createFunctionForDoc()
    },
    {
      "type": "JSON",
      "name": "appsscript",
      "source": "{\n  \"timeZone\": \"Europe/Paris\",\n  \"dependencies\": {\n  },\n  \"exceptionLogging\": \"STACKDRIVER\"\n}"
    } 
  ]
  })
  // Call the Apps Script API -> Method: projects.updateContent
  UrlFetchApp.fetch(`https://script.googleapis.com/v1/projects/${scriptId}/content`, options);
}

// Fill The Script with your desired funtions                     
function createFunctionForDoc(){
    return `
      function customFunction(){
        Logger.log("Hello World");
      }
    `
}

Документы

Есть документы, которые я использовал, чтобы помочь вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...