**任务:**将.csv报表从共享服务器文件夹移动并重命名到我的Google云端硬盘。此时,我的应用程序脚本将接管并导入到指定的工作表中。应用程序脚本嵌入到每个工作表中(共7个工作表),但它们都是完全相同的代码(针对特定文件和工作表进行了更改)。
**问题1:**手动运行时,批处理脚本每次都能完美运行,但在计划运行时,有时它不会重命名我的文件(但仍会移动它们)。
**问题2:**应用程序脚本时好时坏,有时运行正常,有时因错误而失败
TypeError:无法读取空值的属性“clearContents”。
因此,表没有更新,我有csv文件坐在我的驱动器什么也不做。
批处理脚本
@echo off
ren "\\Server\Folder\subfolder\DataDaily-Emb Smalls-*.csv" smalls.csv
ren "\\Server\Folder\subfolder\DataDaily-HP & Laser-*.csv" hp.csv
ren "\\Server\Folder\subfolder\DataDaily-Emb Hats-*.csv" hats.csv
ren "\\Server\Folder\subfolder\DataDaily-Embroidery-*.csv" emb.csv
ren "\\Server\Folder\subfolder\DataDaily-Screen Print-*.csv" sp.csv
ren "\\Server\Folder\subfolder\DataDaily-Database-*.csv" database.csv
robocopy \\Server\Folder\subfolder "G:\My Drive\Dashboard" /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);
}
最后,我在这里不知所措,因为一切看起来都应该工作,但我仍然有重命名不一致与我的批处理脚本和失败的执行我的应用程序脚本。我错过了什么?
1条答案
按热度按时间mcdcgff01#
当您按计划更改文件时,文件锁定通常会出现问题。您可以通过在计划重命名之前复制文件来证明这一点。当文件锁定时,复制通常会成功,然后可以进行更改。
这可能不适合您的业务案例(也许您无法先复制它们),但它将帮助您确定问题。
您可以将此添加到您的robocopy以在计划时进行记录。您应该会得到失败文件的详细错误消息。