drive.properties与谷歌工作表循环



我在谷歌工作表中有两个函数,它们旨在循环通过包含谷歌驱动器中文件的文件ID的单列,发出Properties.get来检索单个属性"LastReview";对于每个文档,并将所有LastReview时间粘贴到下一个可用列中。

我很难在";loopForMetadata";工作。我希望它获取与每个文件ID相关联的所有LastReview时间的列表,然后将其发布到下一个可用列中,以便所有的LastReview时间与文件ID对齐。


function getProperty(fileId) {
var propertyKey = 'LastReview'
var fileId = '1UaQkJU8r1kE9sxpFg6OD8aOuUCoRnSpB9Agg_R9HJ3s'
var response = JSON.stringify(Drive.Properties.get(fileId, 'LastReview', { visibility: 'PUBLIC' }).value);
var key = "value";
var resposeNoQuote = response.replace(/"/g, "")
Logger.log(resposeNoQuote);
}
function loopForMetadata() {
var columnNeeded, data, lastColumn, sh;
sh = SpreadsheetApp.getActiveSheet();
lastColumn = sh.getLastColumn();
data = sh.getRange(1, 1, 1, lastColumn).getValues();//Get 2D array of all values in row one
data = data[0];//Get the first and only inner array
columnNeeded = data.indexOf('ID') + 1;//Arrays are zero indexed- add 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(2, columnNeeded, lastRow - 1, 1);
// Get array of values in the search Range
var rangeValues = searchRange.getValues();
// Loop through array and if condition met, add relevant
// background color.
var resultValues = []
for (i = 0; i < rangeValues.length; i++) {
resultValues.push(getProperty(rangeValues[i]));
Utilities.sleep(10);

}
Logger.log(resultValues);
};

我相信你的目标如下。

  • 您希望使用属性中LastReview的键从fileId的文件中检索值
  • 您希望将检索到的值放在下一个可用列中fileId的同一行中
  • 你想使用谷歌应用程序脚本来实现这一点

修改点:

  • 在您的脚本中,
    • getProperty()不返回值
    • resultValues未放入电子表格
    • 当您想要检索关键字LastReview的值时,Drive.Properties.get(fileId, 'LastReview', { visibility: 'PUBLIC' }).value会直接返回该值
  • 重要的一点是,当fileId的文件不具有密钥LastReview的属性时,似乎Drive.Properties.get()发生了错误。因此,在这次修改中,作为一个简单的变通方法,我使用了try-catch

当以上几点反映到您的脚本中时,它变成如下。

示例脚本:

function loopForMetadata() {
var columnNeeded, data, lastColumn, sh;
sh = SpreadsheetApp.getActiveSheet();
lastColumn = sh.getLastColumn();
data = sh.getRange(1, 1, 1, lastColumn).getValues();//Get 2D array of all values in row one
data = data[0];//Get the first and only inner array
columnNeeded = data.indexOf('ID') + 1;//Arrays are zero indexed- add 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(2, columnNeeded, lastRow - 1, 1);
var rangeValues = searchRange.getValues();
var resultValues = []

// I modified below script.
for (i = 0; i < rangeValues.length; i++) {
var fileId = rangeValues[i];
var value = "";
try {
value = Drive.Properties.get(fileId, 'LastReview', { visibility: 'PUBLIC' }).value;
} catch(e) {}
resultValues.push([value]);
//    Utilities.sleep(10);  // I'm not sure whether this is required.
}
sheet.getRange(2, lastColumn + 1, resultValues.length, 1).setValues(resultValues);
Logger.log(resultValues);
};

注:

  • 请再次确认高级Google服务是否启用了Drive API

参考:

  • 属性:get

最新更新