我正在寻找一种基于的最佳方式来组织我的代码配置(代码的评估方式:架构(
- 速度
- 能见度
- 代码行
- 低耦合
- 维护工作
您能提供满足一个或多个轴的良好模式(几个(吗?
例如,我们都创建了如下代码:
var spread = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spread.getSheetByName("Sheet1");
但是,如果工作表的名称发生更改,我们必须在代码中的每个位置更新它。
我毫不怀疑,我们可以极大地改进脚本在一起的表达方式。作为迄今为止我发现的最好的个人方法,它是创建一个工作表调用"配置";并将里面的所有值设置为Named Range。然后脚本有一个init部分,通过管道将正确命名的范围发送到变量。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ranges = sheet.getNamedRanges();
if (ranges === null || ranges === "") throw ErrorMessage(`Named Range allowing to initialise project are not set for the sheet ${sheet.getName()}`)
var ROOT_DRIVE_ID;
var SHEET_NAME
for (var i = 0; i < ranges.length; i++) {
switch (ranges[i].getName()) {
case "ROOT_DRIVE_ID": ROOT_DRIVE_ID = ranges[i].getRange().getValue(); break;
case "SHEET_NAME" : SHEET_NAME = ranges[i].getRange().getValue(); break
}
}
一次又一次地触摸工作表,就像脚本正在做的那样,会大大降低脚本的速度。您可以将配置存储在中
- 全局对象:
const CONFIG={
ROOT_DRIVE_ID : "",
SHEET_NAME : ""
}
这在读取和写入方面都更快,易于手动配置,但不能从工作表进行配置。
- 缓存服务:
这也更快,但手动配置也不容易。缓存有一个过期时间。
- 属性服务:
这也更快。手动配置也很容易
参考文献:
";最佳实践";
由于getValue和单元格插入可能导致处理时间过长
如果您有大型数据集,通常值得花时间来检查使用Sheets API与SpreadsheetApp的区别。这不一定总是真的,在我看来SpreadsheetApp更容易使用。
阅读最佳实践