2017-06-20 62 views
0

我是一位经验丰富的程序员,对使用Google云端硬盘的脚本编辑器没有经验。 由于我需要撰写一些报告,因此我想知道如何利用Google云端硬盘的脚本功能来简化我的过程。通过从Google表格获取数据创建Google文档。

所以我的目标是我在单词中创建了这种格式,对于单词的某些部分,我需要输入每个学生的分数。但是,由于手动操作非常苛刻,我想知道如何使用谷歌表格和谷歌文档。

所以我想知道是否有一种方法可以让我从电子表格中获取某些数据(每个文档一列),并将这些数字放在Google文档的相应空间中,然后将其保存在Google Drive或发送它作为一个电子邮件。然后,我将为电子表格中的每个列重复此过程,直到创建所有人的报告。

如果你的专业程序员可以帮助我在这里,将深表感谢。我从来没有任何经验与谷歌脚本编辑器,我不知道从哪里开始。谢谢!

+0

欢迎来到StackOverflow,请参加[旅游]。要求提供教程,提供甚至只是推荐的问题在StackOverflow上是无关紧要的。 – Yunnosch

+0

你是一个有经验的程序员,你不知道从哪里开始?你看过[参考](https://developers.google.com/apps-script/reference/spreadsheet/) –

回答

0

你可以查看这个Script for generating Google documents from Google spreadsheet data source教程。

/** 
* Generate Google Docs based on a template document and data incoming from a Google Spreadsheet 
* 
* License: MIT 
* 
* Copyright 2013 Mikko Ohtamaa, http://opensourcehacker.com 
*/ 

// Row number from where to fill in the data (starts as 1 = first row) 
var CUSTOMER_ID = 1; 

// Google Doc id from the document template 
// (Get ids from the URL) 
var SOURCE_TEMPLATE = "xxx"; 

// In which spreadsheet we have all the customer data 
var CUSTOMER_SPREADSHEET = "yyy"; 

// In which Google Drive we toss the target documents 
var TARGET_FOLDER = "zzz"; 

/** 
* Return spreadsheet row content as JS array. 
* 
* Note: We assume the row ends when we encounter 
* the first empty cell. This might not be 
* sometimes the desired behavior. 
* 
* Rows start at 1, not zero based!!! 
* 
*/ 
function getRowAsArray(sheet, row) { 
    var dataRange = sheet.getRange(row, 1, 1, 99); 
    var data = dataRange.getValues(); 
    var columns = []; 

    for (i in data) { 
    var row = data[i]; 

    Logger.log("Got row", row); 

    for(var l=0; l<99; l++) { 
     var col = row[l]; 
     // First empty column interrupts 
     if(!col) { 
      break; 
     } 

     columns.push(col); 
    } 
    } 

    return columns; 
} 

/** 
* Duplicates a Google Apps doc 
* 
* @return a new document with a given name from the orignal 
*/ 
function createDuplicateDocument(sourceId, name) { 
    var source = DocsList.getFileById(sourceId); 
    var newFile = source.makeCopy(name); 

    var targetFolder = DocsList.getFolderById(TARGET_FOLDER); 
    newFile.addToFolder(targetFolder); 

    return DocumentApp.openById(newFile.getId()); 
} 

/** 
* Search a paragraph in the document and replaces it with the generated text 
*/ 
function replaceParagraph(doc, keyword, newText) { 
    var ps = doc.getParagraphs(); 
    for(var i=0; i<ps.length; i++) { 
    var p = ps[i]; 
    var text = p.getText(); 

    if(text.indexOf(keyword) >= 0) { 
     p.setText(newText); 
     p.setBold(false); 
    } 
    } 
} 

/** 
* Script entry point 
*/ 
function generateCustomerContract() { 

    var data = SpreadsheetApp.openById(CUSTOMER_SPREADSHEET); 

    // XXX: Cannot be accessed when run in the script editor? 
    // WHYYYYYYYYY? Asking one number, too complex? 
    //var CUSTOMER_ID = Browser.inputBox("Enter customer number in the spreadsheet", Browser.Buttons.OK_CANCEL); 
    if(!CUSTOMER_ID) { 
     return; 
    } 

    // Fetch variable names 
    // they are column names in the spreadsheet 
    var sheet = data.getSheets()[0]; 
    var columns = getRowAsArray(sheet, 1); 

    Logger.log("Processing columns:" + columns); 

    var customerData = getRowAsArray(sheet, CUSTOMER_ID); 
    Logger.log("Processing data:" + customerData); 

    // Assume first column holds the name of the customer 
    var customerName = customerData[0]; 

    var target = createDuplicateDocument(SOURCE_TEMPLATE, customerName + " agreement"); 

    Logger.log("Created new document:" + target.getId()); 

    for(var i=0; i<columns.length; i++) { 
     var key = columns[i] + ":"; 
     // We don't replace the whole text, but leave the template text as a label 
     var text = customerData[i] || ""; // No Javascript undefined 
     var value = key + " " + text; 
     replaceParagraph(target, key, value); 
    } 

} 

正如@詹姆斯唐纳兰说明,请有关如何使用它来创建脚本,访问该服务的official documentation,并修改谷歌表格文件。

相关问题