【发布时间】:2020-01-19 16:18:55
【问题描述】:
我有一个电子表格,用于列出每个客户的工作时间。我使用脚本制作工作表的 pdf,并直接将 pdf 放在与其刚刚创建的 pdf 相关的客户端文件夹中。它通过从电子表格中获取的客户端名称知道它需要使用哪个文件夹(电子表格中的名称与文件夹名称相同)。
一切都非常顺利...只要客户名称是 1 个单词(例如 WeSellApples),只要客户名称有更多单词(例如 We Do Not Sell Apples),我就会收到错误无法检索下一个对象:迭代器已经结束。
因为使用一个单词的名称,一切都完美无缺,我不知道为什么会发生这种情况。
function createPDF() {
var sheet1 = SpreadsheetApp.getActiveSpreadsheet();
var gebruikSheet1 = sheet1.getSheetByName("Urenregistratie maak pdf");
var ui = SpreadsheetApp.getUi();
var result = ui.alert( // Asks if I'm sure I want to save
"Opslaan als PDF?",
"Sla " +sheet1.getName()+ " " + "week " + gebruikSheet1.getRange("L6").getValue() +
" " + gebruikSheet1.getRange("C6").getValue() +".pdf op als PDF",
// Shows the name so I can double check if I selected the right client,
// client name is in C6 en weeknumber in L6. Both cell values are dynamic (with Vlookup)
ui.ButtonSet.OK_CANCEL);
if (result == ui.Button.OK) {
var hideSheet = sheet1.getSheetByName('Uren bijhouden');
// to make sure only the second sheet is exported as pdf
hideSheet.hideSheet();
var docblob = SpreadsheetApp.getActiveSpreadsheet().getAs("application/pdf");
docblob.setName(sheet1.getName()+ " " + "week " + gebruikSheet1.getRange("L6").getValue() +
" " + gebruikSheet1.getRange("C6").getValue() + ".pdf");
var file = DriveApp.createFile(docblob);
ui.alert(sheet1.getName()+ " " + "week " + gebruikSheet1.getRange("L6").getValue()
+ " " + gebruikSheet1.getRange("C6").getValue() + " is opgeslagen");
} else {
ui.alert("Opslaan als .pdf is niet gelukt");
}
hideSheet.showSheet();
// file to move
var klantmap = gebruikSheet1.getRange("C6").getValue();
// the client name is in cell C6
var id = DriveApp.getFoldersByName(klantmap).next().getId();
// script can find id of client folder without problem as long as client name
// is one word
// this is the line where the error occures when client name contains more words
Logger.log(id);
DriveApp.getFolderById(id).addFile(file); // add file to client folder
DriveApp.getRootFolder().removeFile(file); // removes file from root folder
}
我想收到一些提示,以便我自己找出问题所在。
【问题讨论】:
-
经过测试,我注意到该行为可能是由于空格而发生的,无论文件夹名称中有多少单词,使用
getFoldersByName()都可以正常工作。但是,如果文件夹或搜索名称不完全匹配(可能在任一字符串的末尾有一个额外的空格),我会看到相同的错误,因为它没有找到具有该名称的“任何”文件夹。检查您从工作表中检索的字符串是否有多余的空格,另外,手动使用getFoldersByName()和带有空格的文件夹的硬编码字符串名称进行检查。 -
谢谢,我会做一些检查。
-
您好,只是想检查一下问题是否已解决
-
哦,是的,抱歉,空格确实有问题。我现在正在开发一个功能,如果它不存在,它会自动创建一个客户端文件夹,而不是手动创建文件夹以确保不再有错误。
-
很高兴听到它解决了!至于创建文件夹,像这样创建文件夹会更好,这样你就会知道没有不需要的名称。
标签: google-apps-script google-sheets