Reputation: 419
I have a Google spreadsheet with a number of sheets and some metadata associated with certain rows and columns in the different sheets. I would like to have a script collect ALL the metadata in the whole file so I can check the state of it.
I can get the metadata for a row or column easily enough with:
function showMetadata(range){
var metadata = range.getDeveloperMetadata();
var msg = metadata[0].getLocation().getLocationType();
for (var i = 0; i < metadata.length; i++){
msg = msg+"\\n"+metadata[i].getKey()+": "+metadata[i].getValue()
}
Browser.msgBox(msg)
}
Is there a way of getting all the metadata without having to iterate through each sheet, row and column and calling .getDeveloperMetadata()
on each of them?
Upvotes: 0
Views: 917
Reputation: 6877
Use the find()
method of the DeveloperMetadataFinder
class.
Here's a simple example:
function addMetadata() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getRange('1:1');
sheet.addDeveloperMetadata('sheet');
spreadsheet.addDeveloperMetadata('spreadsheet');
range.addDeveloperMetadata('range');
}
function getMetadata() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var metadataFinder = spreadsheet.createDeveloperMetadataFinder();
results = metadataFinder.find();
for (var i = 0; i < results.length; i++) {
Logger.log('id: ' + results[i].getId() + ', key: ' + results[i].getKey());
}
}
After running addMetadata()
to populate a new spreadsheet with 3 instances of metadata, here's the logging output from running getMetadata()
:
[19-11-12 08:34:54:874 PST] id: 375645033, key: spreadsheet
[19-11-12 08:34:54:875 PST] id: 802864327, key: range
[19-11-12 08:34:54:875 PST] id: 569198748, key: sheet
Upvotes: 2