Google Apps脚本中的createFile()无法正常运行

用户名

我正在尝试创建一个文件。当我从应用程序脚本中的调试器运行以下代码段时,它工作正常。但是,当我从电子表格实时运行它时,它说我没有调用createfile的权限。记录的所有内容都是相同的。问题不在于我没有权限,因为我是电子表格中的唯一人员并且是所有者。CSV的目的是将其从我的Google驱动器移至BigQuery的数据中

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);
   }
}
卡梅伦·罗伯茨(Cameron Roberts)

您在对我的答案的评论中提到您正在使用onEdit触发脚本。由于这是一个简单触发器,因此您当前的方法将行不通。当您使用简单的触发器运行Apps脚本时,它将在权限降低的沙箱中运行。

请参阅:https : //developers.google.com/apps-script/guides/triggers/#restrictions

我推荐的最好方法是创建一个带有UI弹出窗口的自定义菜单选项,询问要导出的行号。如果该代码是由用户从菜单触发的,则它将以访问该用户帐户的完全权限运行。

根据您的用例,计划的触发器也可能起作用。它可以每10分钟或每小时运行一次,并将所有更改导出到电子表格。在这种情况下,Apps脚本将以您的身份运行,并且有权访问您的帐户,并且将在驱动器上创建生成的CSV。

有关如何创建自定义菜单的详细信息:https : //developers.google.com/apps-script/guides/triggers/#onopen

有关如何为用户创建表单的详细信息:https : //developers.google.com/apps-script/guides/ui-service

有关时间驱动触发器的详细信息:https : //developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

方法“ moveActiveSheet”在Google Apps脚本(JavaScript)中无法正常工作

Google Apps脚本:autoResizeColumn无法正常工作

Google Apps脚本:jQuery无法正常工作

Java脚本代码无法在Internet Explorer中运行,而在Google Chrome中可以正常运行

在 Google Apps 脚本中运行多个函数

在Android中运行Google Apps脚本

使对象过滤器在Google Apps脚本中正常运行

regionCode无法正常正常运行,YouTube API,Google App脚本

为什么此Google Apps脚本的参数无法正常工作?

云端构建API部署:无法在Google Apps脚本上运行

我无法为我的Gmail运行Google Apps脚本

无法登录Google Apps脚本

Google登录无法正常运行

无法在Google Apps脚本中获取Sheet ID

Google Apps脚本无法识别我的文档中的表格

无法使jQuery警报在Google Apps脚本中工作

.length在Google Apps脚本中无法处理数组

无法使用 Drive API 在 Google Apps 脚本中获取文件

尝试...在Google Apps脚本中无法按预期方式捕获

Google Apps脚本无法更改项目属性中的时区

无法在Google Apps脚本中解析来自UrlFetchApp的数据

Bootstrap列在Google Chrome Inspector中无法正常运行

Google Apps 脚本中的 Google Drive 通知

备用Google Apps脚本未运行

公式更新后运行Google Apps脚本

Google Apps脚本HTML表单无法提交

无法在Google Apps脚本中使用fetchURL()

无法使用 Google Apps 脚本获取

Google App Engine与 Google Apps脚本(在Business Apps中)