如何有效地将开发人员元数据添加到工作表的 row/column 范围?
How to efficiently add developer metadata to sheets' row/column ranges?
我正在尝试使用 Google Apps 脚本将开发人员元数据添加到某些行范围。到目前为止,我拼凑了这段代码:
function updateMetadata() {
var sheet = SpreadsheetApp.openById("<sheet id>");
var dataRange = sheet.getDataRange();
var productNameRanges = dataRange.getMergedRanges();
productNameRanges.forEach(function(productRange){
var productName = productRange.getCell(1, 1).getValue();
for (var j=productRange.getRow(); j<=productRange.getLastRow(); j++){
var range = sheet.getRange(j+":"+j);
// Remove old metadata
range.getDeveloperMetadata().forEach(function(md){
md.remove();
});
// Add new metadata
range.addDeveloperMetadata(
"product_name",
productName,
SpreadsheetApp.DeveloperMetadataVisibility.PROJECT
);
}
});
}
这样做的目的应该是用元数据值标记合并的单元格范围,以便可以通过合并的单元格的值检索这些范围。不过到目前为止,该函数从未终止,显示的最后一次执行持续时间约为 8 秒。虽然元数据仍然会被修改,但我从未检查过它是否适用于所有范围。
是否有任何其他(有效或完全正确的)方法可以使用应用程序脚本实现此目的?我是否可以通过单个方法调用以某种方式标记行范围而不是遍历行(根据我尝试时收到的错误消息,这是不可能的)?
- 从不推荐合并单元格和使用合并的单元格。
- 为了获得更好的性能,请考虑使用 sheets api through advanced google services or direct https request to the api end point through urlfetch
我正在尝试使用 Google Apps 脚本将开发人员元数据添加到某些行范围。到目前为止,我拼凑了这段代码:
function updateMetadata() {
var sheet = SpreadsheetApp.openById("<sheet id>");
var dataRange = sheet.getDataRange();
var productNameRanges = dataRange.getMergedRanges();
productNameRanges.forEach(function(productRange){
var productName = productRange.getCell(1, 1).getValue();
for (var j=productRange.getRow(); j<=productRange.getLastRow(); j++){
var range = sheet.getRange(j+":"+j);
// Remove old metadata
range.getDeveloperMetadata().forEach(function(md){
md.remove();
});
// Add new metadata
range.addDeveloperMetadata(
"product_name",
productName,
SpreadsheetApp.DeveloperMetadataVisibility.PROJECT
);
}
});
}
这样做的目的应该是用元数据值标记合并的单元格范围,以便可以通过合并的单元格的值检索这些范围。不过到目前为止,该函数从未终止,显示的最后一次执行持续时间约为 8 秒。虽然元数据仍然会被修改,但我从未检查过它是否适用于所有范围。
是否有任何其他(有效或完全正确的)方法可以使用应用程序脚本实现此目的?我是否可以通过单个方法调用以某种方式标记行范围而不是遍历行(根据我尝试时收到的错误消息,这是不可能的)?
- 从不推荐合并单元格和使用合并的单元格。
- 为了获得更好的性能,请考虑使用 sheets api through advanced google services or direct https request to the api end point through urlfetch