我的 Google 电子表格中有以下脚本:
/**
* Create CSV file of Sheet2
* Modified script written by Tanaike
* https://stackoverflow.com/users/7108653/tanaike
*
* Additional Script by AdamD.PE
* version 13.11.2022.1
* https://support.google.com/docs/thread/188230855
*/
const date = new Date();
/** Extrai a data de hoje */
let day = date.getDate();
let month = date.getMonth() + 1;
let year = date.getFullYear();
if (day < 10) {
day = '0' + day;
}
if (month < 10) {
month = `0${month}`;
}
let currentDate = `${day}-${month}-${year}`;
function sheetToCsvModelo0101() {
var filename = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetName() + "-01" + " - " + currentDate; // CSV file name
filename = filename + '.csv';
var ssid=SpreadsheetApp.getActiveSpreadsheet().getId();
var saveTo = DriveApp.getFileById(ssid).getParents().next().getId();
// Tanaike script to create csv file
var csv = "";
var v = SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet()
.getRange("A2:AB3")
.getValues();
v.forEach(function(e) {
csv += e.join(",") + "\n";
});
var newDoc = DriveApp.createFile(filename, csv, MimeType.CSV);
var file = DriveApp.getFileById(newDoc.getId());
DriveApp.getFolderById(saveTo).addFile(file);
DriveApp.getRootFolder().removeFile(file);
}
可以在此处访问电子表格:Worksheet Test Script
此脚本基本上使用 .getRange("A2:AB3")
中定义的范围在工作表所在的同一文件夹中创建一个 .CSV
文件。
该脚本应用于第一个按钮并由它触发。
问题是,如果使用创建工作表的帐户以外的帐户按下按钮,脚本将返回错误异常:无法检索下一个对象:迭代器已到达末尾。
我已经检查过其他帐户是否有权访问电子表格所在的文件夹,以及他们是否有权编辑它,显然一切正常。
我该如何解决这个问题?
我的想法是由其他人编辑此电子表格并生成 .CSV
文件。
最佳答案
我认为在您的脚本中,当用户拥有 DriveApp.getFileById(ssid).getParents()
文件夹的写入权限时,该脚本可以正常工作。但是,在您的脚本中,有几个修改点。
addFile(child)
和removeFile(child)
已被弃用。 Ref请注意这一点。- 在您的脚本中,文件夹对象可直接用于创建文件。
当这些点反射(reflect)在你的脚本中时,下面的修改如何?
修改后的脚本:
在此修改中,修改了 sheetToCsvModelo0101
。
function sheetToCsvModelo0101() {
var filename = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetName() + "-01" + " - " + currentDate; // CSV file name
filename = filename + '.csv';
var ssid = SpreadsheetApp.getActiveSpreadsheet().getId();
// I modified below script.
var folders = DriveApp.getFileById(ssid).getParents();
var folder;
if (folders.hasNext()) {
folder = folders.next();
var user = Session.getEffectiveUser().getEmail();
if (!(folder.getOwner().getEmail() == user || folder.getEditors().some(e => e.getEmail() == user))) {
throw new Error("This user has no write permission for the folder.");
}
} else {
throw new Error("This user has no write permission for the folder.");
}
var csv = "";
var v = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A2:AB3").getValues();
v.forEach(function (e) {
csv += e.join(",") + "\n";
});
var newDoc = folder.createFile(filename, csv, MimeType.CSV);
console.log(newDoc.getId()); // You can see the file ID.
}
- 运行此脚本时,如果用户对该文件夹没有写入权限,则会显示类似
此用户对该文件夹没有写入权限。
的错误。- 来自
我已经检查了其他帐户是否有权访问电子表格所在的文件夹以及他们是否有权编辑它,显然一切都正常。
,如果错误与文件夹的写权限,请再次确认。如果再次确认权限后仍然出现同样的错误,我认为需要考虑另一个问题。
- 来自
引用:
关于google-apps-script - Google 脚本 - 异常 : Cannot retrieve the next object: iterator has reached the end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74649696/