2016-05-23 14 views
1

「提出」という名前のフォルダがあるGoogleドライブがあります。 私は「フォーム」を作成し、エンドユーザーが(フォームから)アップロードしたものを投稿フォルダに保存するGoogle Appsスクリプトも用意しています。ここで Google Apps Scriptフォームを既存のスプレッドシートにインポートする

は、スクリプトの例(server.gs)です:

function doGet(e) { 
    return HtmlService.createHtmlOutputFromFile('form.html'); 
} 

function uploadFiles(form) { 

    try { 

    var dropbox = "Submissions"; 
    var folder, folders = DriveApp.getFoldersByName(dropbox); 

    if (folders.hasNext()) { 
     folder = folders.next(); 
    } else { 
     folder = DriveApp.createFolder(submissions); 
    } 

    var blob = form.myFile;  
    var file = folder.createFile(blob);  
    file.setDescription("Uploaded by " + form.myName); 

    return "File uploaded successfully " + file.getUrl(); 

    } catch (error) { 

    return error.toString(); 
    } 

} 

そしてForm.htmlは以下のとおりである:これは何

<form id="myForm"> 

<label>Name:</label> 
<input type="text" name="myName"> 

<label>Email:</label> 
<input type="text" name="myEmail"> 

<label>Demo Title (e.g "Artist - Demo Name"):</label> 
<input type="text" name="myTitle"> 

<label>Choose Demo File:</label> 
<input type="file" name="myFile"> 

<input type="submit" value="Submit" 
      onclick="google.script.run 
        .uploadFiles(this.parentNode); 
        return false;"> 

が作成され"名前"、 "電子メール"、 "デモタイトル"のテキストフィールドと "送信"ボタンがあるフォーム。ユーザーはファイルを添付し、このフォームを使用してファイルをアップロードします。

今、ファイルのアップロードは正常に動作します。誰でもファイルをアップロードすることができ、Googleドライブのフォルダ(投稿)に正しく表示されます...しかし、入力されなかったかのように他の詳細は単に消えます。私は、その詳細を既存のスプレッドシートに、タイムスタンプを付けて表示することをお勧めします。

誰でも手伝ってもらえますか?

答えて

0

あなたはSpreadsheetApp.getActiveSpreadsheet()getSheetByName()getRange()getLastRow()、およびgetLastColumn()などを使用することができるようになります。このクラスで、Class SpreadsheetAppを使用する必要があります。

var doc = SpreadsheetApp.openById(ID); 
var sheet = doc.getSheetByName(SHEET_NAME); 
// we'll assume header is in row 1 but you can override with header_row in GET/POST data 
var headRow = e.parameter.header_row || 1; 
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; 
var nextRow = sheet.getLastRow()+1; // get next row 
var row = []; 
// loop through the header columns 
for (i in headers){ 
if (headers[i] == "Timestamp"){ // special case if you include a 'Timestamp' column 
row.push(new Date()); 
} else { // else use header name to get data 
row.push(e.parameter[headers[i]]); 
} 
} 
// more efficient to set values as [][] array than individually 
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]); 
// return json success results 
return ContentService 
.createTextOutput(JSON.stringify({"result":"success", "row": nextRow})) 
.setMimeType(ContentService.MimeType.JSON); 
} catch(e){ 
// if error return this 
return ContentService 
.createTextOutput(JSON.stringify({"result":"error", "error": e})) 
.setMimeType(ContentService.MimeType.JSON); 
} finally { //release lock 
lock.releaseLock(); 
} 

EDIT:たとえば

これはあなたのコード

<form id="myForm"> 

<label>Name:</label> 
<input type="text" name="myName"> 

<label>Email:</label> 
<input type="text" name="myEmail"> 

<label>Demo Title (e.g "Artist - Demo Name"):</label> 
<input type="text" name="myTitle"> 

<label>Choose Demo File:</label> 
<input type="file" name="myFile"> 

<input type="submit" value="Submit" 
      onclick="google.script.run 
        .uploadFiles(this.parentNode); 
        return false;"> 

(server.gs)

function doGet(e) { 
    return HtmlService.createHtmlOutputFromFile('form.html'); 
} 

function uploadFiles(form) { 

    try { 

    var dropbox = "Submissions"; 
    var folder, folders = DriveApp.getFoldersByName(dropbox); 

    if (folders.hasNext()) { 
     folder = folders.next(); 
    } else { 
     folder = DriveApp.createFolder(submissions); 
    } 

    var blob = form.myFile;  
    var file = folder.createFile(blob);  
    file.setDescription("Uploaded by " + form.myName); 

    return "File uploaded successfully " + file.getUrl(); 

    //pass data to spreadsheet 
    processForm(YOUR_VARIABLES) 

    } catch (error) { 

    return error.toString(); 
    } 

} 
function processForm(YOUR_VARIABLES) { 

    var Name = name; 
    var email = email; 


    var ss = SpreadsheetApp.openById(SPEADSHEET_ID); 
    var sheet = ss.getSheetByName(SHEET_NAME); 

    //Change this depending on the order and number of inputs to be recorded 
    sheet.getRange(sheet.getLastRow()+1, 1, 1, 5).setValues([[Name,email]]); 
} 
ここ

この tutorialからサンプルコードです

この回答を確認して、スプレッドシートアプリの実装方法に関するアイデアを入手してください:Get form input text value to insert in a Google SpreadsheetUploading file using Google Apps Script using HtmlService

+0

返信ありがとうございます。私のコーディングスキルは基本的には初心者レベルだと言わざるを得ないので、私があなたの答えをどうやっているのかは分かりにくいです。 この新しいコードを 'server.gs'スクリプトまたは 'form.html'部分に入れますか? 私はあなたのコードを変更する必要があるように見えますが、正確に私がどのように超えているのですか:( – TJV

+0

コード全体を変更する必要はなく、 'SpreadSheetApp()'クラスを統合するだけです。 –

+0

フォームのアップロード部分をそのまま実行したい(オーディオファイルがフォルダに入る)が、私は他の詳細(名前、電子メールなど)を移動したい "SpreadSheetApp()"をコードに追加するのは簡単ではないと私は考えています – TJV

関連する問題