سطح کدنویسی : مبتدی
مدت زمان : 15 دقیقه
نوع پروژه : اتوماسیون با منوی سفارشی
اهداف
- درک کنید که راه حل چه کاری انجام می دهد.
- آنچه را که سرویس های Apps Script در راه حل انجام می دهند، بدانید.
- اسکریپت را تنظیم کنید
- اسکریپت را اجرا کنید.
در مورد این راه حل
برای صرفه جویی در زمان و کاهش خطاهای کپی و چسباندن دستی، می توانید به طور خودکار محتوا را از چندین سند به یک سند اصلی وارد کنید. این راه حل بر جمع آوری گزارش های وضعیت پروژه تمرکز دارد، اما شما می توانید آن را مطابق با نیازهای خود ویرایش کنید.
چگونه کار می کند
اسکریپت یک پوشه برای ذخیره اسنادی که میخواهید محتوا را از آن وارد کنید و یک سند الگو برای شروع وارد کردن از آن، ایجاد میکند. این اسکریپت همچنین شامل توابعی است که اسناد نمونه را برای نمایش این راه حل ایجاد می کند.
هنگامی که کاربر Import خلاصهها را از منوی سفارشی انتخاب میکند، اسکریپت تمام فایلهای Docs را در پوشه دریافت میکند و از طریق هر کدام تکرار میشود. اسکریپت به دنبال یک رشته و نوع سرفصل خاص برای شناسایی متن خلاصه ای است که باید کپی کند. پس از کپی شدن متن، اسکریپت رنگ متن رشته شناسه را تغییر می دهد تا تکراری شدن را کاهش دهد. اسکریپت خلاصه ها را در سند اصلی، هر کدام در جدول تک سلولی خود، می چسباند.
خدمات اسکریپت برنامه ها
این راه حل از خدمات زیر استفاده می کند:
- خدمات سند - الگو و نمونه اسناد منبع را ایجاد می کند. از طریق هر سند منبع به دنبال خلاصههای پروژه جدید برای وارد کردن میگردد. خلاصه ها را به سند اصلی وارد می کند. اسناد منبع را به روز می کند تا از وارد شدن بیش از یک بار خلاصه ها جلوگیری کند.
- سرویس Drive - یک پوشه برای ذخیره اسناد منبع ایجاد می کند. سند الگو و نمونه اسناد منبع را به پوشه اضافه می کند.
- سرویس Utilities - هر بار که اسکریپت خلاصههایی را از اسناد منبع وارد میکند، تاریخی را که اسکریپت به سند اصلی اضافه میکند، قالببندی میکند.
- سرویس پایه - از کلاس
Session
برای بدست آوردن منطقه زمانی اسکریپت استفاده می کند. اسکریپت هنگام اضافه کردن تاریخ واردات به سند اصلی از منطقه زمانی استفاده می کند.
پیش نیازها
برای استفاده از این نمونه به پیش نیازهای زیر نیاز دارید:
- یک حساب Google (حسابهای Google Workspace ممکن است به تأیید سرپرست نیاز داشته باشند).
- یک مرورگر وب با دسترسی به اینترنت.
اسکریپت را تنظیم کنید
روی دکمه زیر کلیک کنید تا یک کپی از سند محتوای مجموع تهیه کنید.
یک کپی تهیه کنید
اسکریپت را اجرا کنید
یک دمو با اسناد نمونه اجرا کنید
- روی وارد کردن خلاصه ها > پیکربندی > اجرای تنظیمات نمایشی با اسناد نمونه کلیک کنید. ممکن است لازم باشد صفحه را بازخوانی کنید تا این منوی سفارشی ظاهر شود.
وقتی از شما خواسته شد، اسکریپت را مجاز کنید. اگر صفحه رضایت OAuth اخطار را نشان میدهد، این برنامه تأیید نشده است ، با انتخاب پیشرفته > رفتن به {Project Name} (ناامن) ادامه دهید.
روی وارد کردن خلاصه ها > پیکربندی > اجرای دمو راه اندازی مجدد با اسناد نمونه کلیک کنید.
وقتی از شما خواسته شد، URL پوشه Drive را برای استفاده در مرحله بعد کپی کنید.
روی OK کلیک کنید.
روی وارد کردن خلاصه ها > وارد کردن خلاصه ها کلیک کنید.
وقتی از شما خواسته شد، روی OK کلیک کنید.
خلاصه پروژه هایی که از نمونه اسناد وارد شده را بررسی کنید.
اضافه کردن و وارد کردن خلاصه
- در یک برگه مرورگر جدید، URL پوشه را جایگذاری کنید تا پوشه وضعیت پروژه باز شود.
- فایل Project ABC را باز کنید.
- با افزودن محتوای زیر به انتهای سند، یک خلاصه جدید برای وارد کردن ایجاد کنید:
-
Summary
تایپ کنید و سبک متن را روی عنوان 3 قرار دهید. - مستقیماً در زیر
Summary
، یک جدول 1x1 را وارد کنید. اطمینان حاصل کنید که هیچ خط خالی بین Summary
و جدول وجود ندارد. - در جدول
Hello world!
.
- به سند اصلی برگردید و روی وارد کردن خلاصه ها > وارد کردن خلاصه ها کلیک کنید.
- وقتی از شما خواسته شد، روی OK کلیک کنید.
- آخرین واردات خود را در انتهای سند مشاهده کنید.
کد را مرور کنید
برای بررسی کد Apps Script برای این راه حل، روی مشاهده کد منبع در زیر کلیک کنید:
مشاهده کد منبع
Setup.gs
/**
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* This file contains functions that create the template and sample documents.
*/
/**
* Runs full setup configuration, with option to include samples.
*
* Called from menu & setupWithSamples()
*
* @param {boolean} includeSamples - Optional, if true creates samples files. *
*/
function setupConfig(includeSamples) {
// Gets folder to store documents in.
const folder = getFolderByName_(PROJECT_FOLDER_NAME)
let msg =
`\nDrive Folder for Documents: '${PROJECT_FOLDER_NAME}'
\nURL: \n${folder.getUrl()}`
// Creates sample documents for testing.
// Remove sample document creation and add your own process as needed.
if (includeSamples) {
let filesCreated = 0;
for (let doc of samples.documents) {
filesCreated += createGoogleDoc(doc, folder, true);
}
msg += `\n\nFiles Created: ${filesCreated}`
}
const ui = DocumentApp.getUi();
ui.alert(`${APP_TITLE} [Setup]`, msg, ui.ButtonSet.OK);
}
/**
* Creates a single document instance in the application folder.
* Includes import settings already created [Heading | Keywords | Table]
*
* Called from menu.
*/
function createSampleFile() {
// Creates a new Google Docs document.
const templateName = `[Template] ${APP_TITLE}`;
const doc = DocumentApp.create(templateName);
const docId = doc.getId();
const msg = `\nDocument created: '${templateName}'
\nURL: \n${doc.getUrl()}`
// Adds template content to the body.
const body = doc.getBody();
body.setText(templateName);
body.getParagraphs()[0].setHeading(DocumentApp.ParagraphHeading.TITLE);
body.appendParagraph('Description').setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph('');
const dateString = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'MMMM dd, yyyy');
body.appendParagraph(`${FIND_TEXT_KEYWORDS} - ${dateString}`).setHeading(APP_STYLE);
body.appendTable().appendTableRow().appendTableCell('TL;DR');
body.appendParagraph("");
// Gets folder to store documents in.
const folder = getFolderByName_(PROJECT_FOLDER_NAME)
// Moves document to application folder.
DriveApp.getFileById(docId).moveTo(folder);
const ui = DocumentApp.getUi();
ui.alert(`${APP_TITLE} [Template]`, msg, ui.ButtonSet.OK);
}
/**
* Configures application for demonstration by setting it up with sample documents.
*
* Called from menu | Calls setupConfig with option set to true.
*/
function setupWithSamples() {
setupConfig(true)
}
/**
* Sample document names and demo content.
* {object} samples[]
*/
const samples = {
'documents': [
{
'name': 'Project GHI',
'description': 'Google Workspace Add-on inventory review.',
'content': 'Reviewed all of the currently in-use and proposed Google Workspace Add-ons. Will perform an assessment on how we can reduce overlap, reduce licensing costs, and limit security exposures. \n\nNext week\'s goal is to report findings back to the Corp Ops team.'
},
{
'name': 'Project DEF',
'description': 'Improve IT networks within the main corporate building.',
'content': 'Primarily focused on 2nd thru 5th floors in the main corporate building evaluating the network infrastructure. Benchmarking tests were performed and results are being analyzed. \n\nWill submit all findings, analysis, and recommendations next week for committee review.'
},
{
'name': 'Project ABC',
'description': 'Assess existing Google Chromebook inventory and recommend upgrades where necessary.',
'content': 'Concluded a pilot program with the Customer Service department to perform inventory and update inventory records with Chromebook hardware, Chrome OS versions, and installed apps. \n\nScheduling a work plan and seeking necessary go-forward approvals for next week.'
},
],
'common': 'This sample document is configured to work with the Import summaries custom menu. For the import to work, the source documents used must contain a specific keyword (currently set to "Summary"). The keyword must reside in a paragraph with a set style (currently set to "Heading 3") that is directly followed by a single-cell table. The table contains the contents to be imported into the primary document.\n\nWhile those rules might seem precise, it\'s how the application programmatically determines what content is meant to be imported and what can be ignored. Once a summary has been imported, the script updates the heading font to a new color (currently set to Green, hex \'#2e7d32\') to ensure the app ignores it in future imports. You can change these settings in the Apps Script code.'
}
/**
* Creates a sample document in application folder.
* Includes import settings already created [Heading | Keywords | Table].
* Inserts demo data from samples[].
*
* Called from menu.
*/
function createGoogleDoc(document, folder, duplicate) {
// Checks for duplicates.
if (!duplicate) {
// Doesn't create file of same name if one already exists.
if (folder.getFilesByName(document.name).hasNext()) {
return 0 // File not created.
}
}
// Creates a new Google Docs document.
const doc = DocumentApp.create(document.name).setName(document.name);
const docId = doc.getId();
// Adds boilerplate content to the body.
const body = doc.getBody();
body.setText(document.name);
body.getParagraphs()[0].setHeading(DocumentApp.ParagraphHeading.TITLE);
body.appendParagraph("Description").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(document.description);
body.appendParagraph("Usage Instructions").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(samples.common);
const dateString = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'MMMM dd, yyyy');
body.appendParagraph(`${FIND_TEXT_KEYWORDS} - ${dateString}`).setHeading(APP_STYLE);
body.appendTable().appendTableRow().appendTableCell(document.content);
body.appendParagraph("");
// Moves document to application folder.
DriveApp.getFileById(docId).moveTo(folder);
// Returns if successfully created.
return 1
}
مشارکت کنندگان
این نمونه توسط گوگل با کمک کارشناسان توسعه دهنده گوگل نگهداری می شود.
مراحل بعدی