2014-10-30 84 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

相关问题