Livello di programmazione: principiante
Durata: 15 minuti
Tipo di progetto: Automazione con un menu personalizzato
Obiettivi
- Scopri cosa fa la soluzione.
- Scoprire cosa fanno i servizi Apps Script
con questa soluzione.
- Configura lo script.
- Esegui lo script.
Informazioni su questa soluzione
Per risparmiare tempo e ridurre gli errori del copia e incolla manuale, puoi importare automaticamente i contenuti di più documenti in un unico documento principale.
Questa soluzione si concentra sull'aggregazione dei report sullo stato dei progetti, ma puoi modificarla
per adattarla alle tue esigenze.
Come funziona
Lo script crea una cartella in cui archiviare i documenti da cui vuoi importare i contenuti e un documento modello da cui iniziare l'importazione. Lo script include anche funzioni che creano documenti di esempio per dimostrare questa soluzione.
Quando un utente seleziona Importa riepiloghi dal menu personalizzato, lo script recupera tutti i file di Documenti nella cartella e li ripete. Lo script cerca una stringa e un tipo di intestazione specifici per identificare il testo di riepilogo da copiare. Dopo aver copiato il testo, lo script cambia il colore del testo della stringa identificatore per ridurne la duplicazione. Lo script incolla i riassunti nel documento principale, ciascuno in una propria tabella a cella singola.
Servizi Apps Script
Questa soluzione utilizza i seguenti servizi:
- Servizio documenti: crea il modello e i documenti di origine di esempio. itera ogni documento di origine cercando
nuovi riepiloghi di progetto da importare. Importa i riepiloghi nel documento principale.
Aggiorna i documenti di origine per impedire che i riepiloghi vengano importati più di una volta.
- Servizio Drive: crea una cartella in cui archiviare i documenti di origine. Aggiunge alla cartella il documento del modello e i documenti di origine di esempio.
- Servizio utilità: formatta la data aggiunta dallo script al documento principale ogni volta che lo script importa i riepiloghi dai documenti di origine.
- Servizio di base: utilizza la classe
Session
per ottenere il fuso orario dello script. Lo script utilizza il fuso orario quando aggiunge la data
dell'importazione al documento principale.
Prerequisiti
Per utilizzare questo esempio, devi disporre dei seguenti prerequisiti:
- Un Account Google (gli account Google Workspace potrebbero
richiedere l'approvazione dell'amministratore).
- Un browser web con accesso a Internet.
Configura lo script
Fai clic sul pulsante di seguito per creare una copia del documento Contenuti aggregati.
Crea una copia
Esegui lo script
Esegui una demo con documenti di esempio
- Fai clic su Importa riepiloghi > Configura
> Esegui la configurazione della demo con documenti di esempio.
Potrebbe essere necessario aggiornare la pagina per visualizzare questo menu personalizzato.
Quando richiesto, autorizza lo script.
Se nella schermata per il consenso OAuth viene visualizzato l'avviso Questa app non è verificata,
continua selezionando Avanzate >
Vai a {Nome progetto} (non sicuro).
Fai di nuovo clic su Importa riepiloghi > Configura
> Esegui la configurazione della demo con documenti di esempio.
Quando richiesto, copia l'URL della cartella di Drive per utilizzarlo in un passaggio successivo.
Fai clic su OK.
Fai clic su Importa riepiloghi > Importa riepiloghi.
Quando richiesto, fai clic su OK.
Rivedi i riepiloghi dei progetti importati dai documenti di esempio.
Aggiungere e importare un riepilogo
- In una nuova scheda del browser, incolla l'URL della cartella per aprire la cartella Stato progetto.
- Apri il file Progetto ABC.
- Crea un nuovo riepilogo da importare aggiungendo i seguenti contenuti alla fine del documento:
- Digita
Summary
e imposta lo stile di testo su Intestazione 3.
- Subito sotto
Summary
, inserisci una tabella 1 x 1. Assicurati che non ci siano righe vuote tra Summary
e la tabella.
- Nella tabella, digita
Hello world!
.
- Torna al documento principale e fai clic su Importa riepiloghi
> Importa riepiloghi.
- Quando richiesto, fai clic su OK.
- Visualizza l'ultima importazione alla fine del documento.
Rivedi il codice
Per esaminare il codice di Apps Script per questa soluzione, fai clic su Visualizza codice sorgente qui sotto:
Visualizza codice sorgente
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
}
Collaboratori
Questo campione è gestito da Google con l'aiuto degli Esperti Google Developers.
Passaggi successivi