google-apps-script - 仅在 CSV 完全导入后开始计算
问题描述
我每晚都会生成一个 CSV 文件作为从不同系统下载的文件。我每天都需要将此 CSV 导入 Google 表格。我的 Google 表格获取 CSV 数据并对数据运行许多不同的计算以生成我的最终数据集。
通过使用将 CSV 数据上传到 Google 表格的功能,我能够完成所有这些工作,如下所示:
function importCSVFromGoogleDrive() {
var file = DriveApp.getFilesByName("DualCreditExport.csv").next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var sheet = SpreadsheetApp.getActive().getSheetByName('CURRENT');
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
在我的 CSV 文件超过大约 3500 行之前,这一切正常。原因是一旦上传了几行,我的谷歌表格的计算就会开始发生。他们需要几分钟才能完成,然后上传继续并重新启动计算。
所以基本上,导入会不断地被计算中断,这使得导入脚本超过了最大执行时间。
但是,导入脚本只需要 15 秒即可运行。计算运行大约需要 5 分钟。因此,如果我能够完成导入然后运行计算,我会没事的。
任何关于如何完全上传 csv 的想法将不胜感激。
解决方案
避免立即重新计算的一种方法是使用独立的脚本项目或绑定到不同电子表格的项目,SpreadsheetApp.openById(id)
或者SpreadsheetApp.openByUrl(url)
使用Spreadsheet.getActive();
在导入脚本执行期间用户不打开目标电子表格的方式。这是因为除了重新计算任务所需的计算之外,在打开电子表格的客户端和服务器之间还有同步任务,并且没有其他方法可以暂停/停止重新计算。
推荐阅读
- php - 替换数组中所有在php中具有“o”字母的值
- amazon-web-services - Amplify (AWS) 验证电子邮件给出 400 错误请求错误
- javascript - 关于对象上的 ES6 扩展运算符的快速问题
- azure-devops - 利用变量填充 kubernetesServiceConnection:在 KubernetesManifest@0 任务中设置
- c++ - 使用 SFML 编译 Cmake
- vhdl - VHDL组件多路复用器不在modelsim中返回值
- fhir-server-for-azure - FHIR Server For Azure:有没有办法在不分页的情况下返回特定资源?
- robotframework - 是否可以直接从 Seettings 或类似文件夹中生成与默认文件夹不同的文件夹中的文档?
- php - 图像未显示在 laravel 刀片视图中
- asp.net - ASP.NET 网络编程