任务:将.csv报告从共享服务器文件夹移动并重命名到我的Google Drive。此时,我的应用程序脚本将接管并导入到指定的工作表中。应用程序脚本嵌入到每张工作表中(共7张),但它们都是完全相同的代码(针对特定的文件和工作表进行了更改)。
问题1:手动运行时,批处理脚本每次都能完美工作,但在计划时,有时它不会重命名我的文件(但仍会移动它们)。
问题2:应用程序脚本是偶然的,有时运行完美,有时失败并出现错误
"TypeError:无法读取null的属性"clearContents";。
因此,工作表没有更新,我的驱动器中有csv文件,什么都不做。
批脚本
@echo off
ren "\ServerFoldersubfolderDataDaily-Emb Smalls-*.csv" smalls.csv
ren "\ServerFoldersubfolderDataDaily-HP & Laser-*.csv" hp.csv
ren "\ServerFoldersubfolderDataDaily-Emb Hats-*.csv" hats.csv
ren "\ServerFoldersubfolderDataDaily-Embroidery-*.csv" emb.csv
ren "\ServerFoldersubfolderDataDaily-Screen Print-*.csv" sp.csv
ren "\ServerFoldersubfolderDataDaily-Database-*.csv" database.csv
robocopy \ServerFoldersubfolder "G:My DriveDashboard" /MOV /XF *.bat
应用程序脚本示例在这个论坛上的不同帖子中蹒跚而行,它适用于除此之外的所有其他表单
function RecImport() {
const csvFolderName = 'FolderName';
var file = DriveApp.getFilesByName("rec.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("rec");
sheet.clearContents();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
DriveApp.getFilesByName("rec.csv").next().setTrashed(true);
}
其他一致工作的表单代码示例
function ImportSmallsCSVfromDrive() {
const csvFolderName = 'FolderName';
var file = DriveApp.getFilesByName("smalls.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('smalls');
sheet.clearContents();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
DriveApp.getFilesByName("smalls.csv").next().setTrashed(true);
}
最终,我在这里不知所措,因为一切看起来都应该正常工作,但我仍然有与批处理脚本重命名不一致的问题,以及应用程序脚本执行失败的问题。我错过了什么?
在按计划更改文件时,文件锁通常会出现问题。您可以通过在计划重命名之前复制文件来证明这一点。当文件被锁定,然后可以进行更改时,复制通常会成功。
这可能不适合你的商业案例(也许你不能先复制它们),但它会帮助你识别问题。
您可以将其添加到您的机器人副本中,以便在计划时进行日志记录。您应该得到失败文件的详细错误消息。
>> c:log.txt