2017-06-20 2 views
0

私は、Googleドライブのスクリプトエディタを使い慣れていない経験豊富なプログラマーです。 いくつかのレポートを作成する必要があるため、Googleドライブのスクリプト機能を悪用してプロセスを容易にする方法が不思議でした。Googleスプレッドからデータを取得してGoogleドキュメントファイルを作成する。

私の目標は、私がWordsで作成したこのフォーマットです.Wordsのいくつかの部分では、私は各学生の得点を入れる必要があります。しかし、これを手動で行うことは非常に厳しいものですが、私はGoogleシートとGoogleドキュメントを利用する方法を考えていました。

スプレッドシート(​​各文書の1列)から特定のデータを取得し、Googleドキュメントファイルの適切なスペースに数値を入力してGoogleドライブに保存するか送信する方法があるかどうかは疑問でしたそれは電子メールとして。次に、全員のレポートが作成されるまでスプレッドシートの各列に対してこのプロセスを繰り返します。

あなたがプロのプログラマーであれば、ここで私を助けることができますので、深く感謝します。私はGoogleスクリプトエディタの経験が一度もなかったので、どこから始めたらいいのか分かりません。ありがとうございました!

+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); 
    } 

} 

@James Donnellanスクリプトは、アクセスを作成することを可能にするサービスを使用して、Googleスプレッドシートファイルを変更する方法についてofficial documentationを確認してください、述べたように。

関連する問題