2014-10-30 101 views
0

我想創建一個文件。當我在應用程序腳本中的調試器中運行以下代碼段時,它工作正常。但是,當我從電子表格實時運行它時,它說我沒有權限調用createfile。所有記錄的內容都是相同的。問題不在於我沒有權限,因爲我是電子表格中的唯一人員,並且是所有者。該CSV的目的是將它從我的谷歌驅動器移動到數據的BigQuerycreateFile()在谷歌應用程序腳本不能正常工作

function saveAsCSV(row) { //Doc to Csv 
//row = 3; //when this is uncommented and ran from the debugger, it works. 

try{ 

var fileName= Date.now() 
fileName = fileName + ".csv"; 


var csvFile = convertRangeToCsvFile_(fileName,row); 
Logger.log(csvFile); //Both times ran on the spreadsheet and from debug equals the same. 

DriveApp.createFile(fileName, csvFile); 


SpreadsheetApp.getActiveSpreadsheet().getSheetByName("New and Open").getRange("J" + row.toString()).setValue(""); 

loadCsv(fileName); 

} 
catch(e){Logger.log("B" + e.message);} //No permission to create file 
} 



function convertRangeToCsvFile_(csvFileName, r) { 

var ws = SpreadsheetApp.getActiveSpreadsheet(); 
try { 
//var data = ws.getValues(); 
var csvFile = undefined; 

var csv = ""; 
var row = r; 

var datArray = Create2DArray(1,19); 


    datArray[0][0] = ws.getRange("A" + row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][1] = ws.getRange("B"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][2] = ws.getRange("C"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][3] = ws.getRange("D"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][4] = ws.getRange("E"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][5] = ws.getRange("F"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][6] = ws.getRange("G"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][7] = ws.getRange("H"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][8] = ws.getRange("I"+row.toString()).getValue().toString().toUpperCase(); 
    datArray[0][9] = new Date(ws.getRange("K"+row.toString()).getValue().toString()).getHours(); 
    datArray[0][10] = new Date(ws.getRange("K"+row.toString()).getValue().toString()).getMinutes(); 
    datArray[0][11] = new Date(ws.getRange("L"+row.toString()).getValue().toString()).getHours(); 
    datArray[0][12] = new Date(ws.getRange("L"+row.toString()).getValue().toString()).getMinutes(); 
    datArray[0][13] = new Date(ws.getRange("M"+row.toString()).getValue().toString()).getHours(); 
    datArray[0][14] = new Date(ws.getRange("M"+row.toString()).getValue().toString()).getMinutes(); 
    datArray[0][15] = new Date(ws.getRange("N"+row.toString()).getValue().toString()).getTime(); 
    datArray[0][16] = new Date(ws.getRange("N"+row.toString()).getValue().toString()).getFullYear(); 
    datArray[0][17] = new Date(ws.getRange("N"+row.toString()).getValue().toString()).getMonth(); 
    datArray[0][18] = new Date(ws.getRange("N"+row.toString()).getValue().toString()).getDate(); 

for(var i = 0; i < 19; i++){ 
    if(datArray[0][i] == ""){if(i > 9){datArray[0][i] = 0;} else{datArray[0][i] = "nil";} } 
    if(i < 18){csv += '"' + datArray[0][i] + '"' + ",";} 
    else{ csv += '"' + datArray[0][i] + '"'; } 
} 

Logger.log("A " + csv); 
Logger.log(csv + "\n" + datArray[0].join(",")); 
csvFile = csv; 
return csvFile; 
} 
    catch(err) { 
    Logger.log("C" + err); 
    Browser.msgBox(err); 
    } 
} 
+0

什麼*究竟*是關於如何創建一個表單供用戶https://developers.google.com/apps-script/guides/triggers/#onopen

詳細信息:如何創建自定義菜單

詳細錯誤信息你得到? – azawaza 2014-10-31 14:54:33

回答

1

你提到在我的答案您正在使用onEdit觸發腳本您的評論。由於這是一個簡單的觸發器,您目前的方法將無法工作。當您使用簡單的觸發器來運行Apps腳本時,它會在權限減少的沙箱中運行。

參見:https://developers.google.com/apps-script/guides/triggers/#restrictions

我可以推薦的就是創建一個UI彈出詢問行號導出自定義菜單選項最好的。如果代碼是由用戶的菜單觸發的,它將以完全權限運行以訪問該用戶帳戶。

根據您的使用情況,預定的觸發器也可能工作。它可以每10分鐘或每小時運行一次並將任何更改導出到電子表格。在這種情況下,Apps腳本將以您的身份運行,並有權訪問您的帳戶,並且生成的CSV將在您的驅動器上創建。時間驅動的觸發器https://developers.google.com/apps-script/guides/ui-service

詳情:https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers

+0

他們在電子表格中鍵入'X',並觸發onEdit(),然後調用SaveAsCSV(3)。這仍然是一個自定義功能? – user2939446 2014-11-01 12:47:31

+0

OnEdit是一個「簡單觸發器」,它也可以用同樣的方法進行限制,所以我上面發佈的解決方案適用。我將編輯我的答案直接適用於您的案例。 – 2014-11-03 12:08:27

+0

胡卡。雖然謝謝! – user2939446 2014-11-07 22:03:11