Я пытаюсь извлечь имена всех существующих вкладок и сравнить их с другим массивом, который в данном случае является KANew.
Ниже приведен код, который я использовал ...
function Checking() {
var reportId = xxx
var profileId = yyy;
var httpOptions = {'headers': {'Authorization': 'Bearer ' +
ScriptApp.getOAuthToken()}};
var additionalParameters = {'synchronous': 'true'};
//run report and get file ID
var ReportFile = eXelate.Reports.run(profileId, reportId,
additionalParameters);
var ReportFileID = (ReportFile.id);
//
var newReportFile = eXelate.Files.get(reportId,
ReportFileID);
if(newReportFile.urls) {var httpOptions = {'headers': {'Authorization':
'Bearer ' + ScriptApp.getOAuthToken()}};
var csvContent = UrlFetchApp.fetch(newReportFile.urls.apiUrl,
httpOptions).getContentText();
var csvData = Utilities.parseCsv(csvContent);
//past data into sheet
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.insertRowsAfter(sheet.getMaxRows(), 6000);
sheet.deleteRows(1,6000);
sheet.getRange(1, 1, csvData.length,
csvData[0].length).setValues(csvData);
//delete beginning and report totals
sheet.deleteRows(1, 11);
var sheets = new Array()
var activess = SpreadsheetApp.getActive();
var sheetss = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i = 0; i < sheetss.length ; i++) sheets.push( [sheetss[i].getName() ] )
var lastrow = sheet.getLastRow();
sheet.deleteRows(lastrow);
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
var rawvalues = sheet.getRange(2,1,lastrow,1).getValues();
var rawvaluestring = rawvalues.toString();
var sheetsforremoval = sheets.toString();
var lR = sheet.getDataRange().getNumRows();
var kA = sheet.getRange(2,1,lR,1).getValues();
var kANew = [].concat.apply([],kA);
for (var i = 0; i < kANew.length; i ++){
kANew[i] += ' Placements'
// Make sure to push the actual raw data name and keep it in the array
//so that the deleteSheet doesn`t recognize raw data name as something to delete!!!!!!!!!
}
kANew.push('Sheet1')
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[2] == 0 || row[2] == '') {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
}
var obj = {};
var ret_arr = [];
for (var i = 0; i < kANew.length; i++) {
obj[kANew[i]] = true;
}
for (var key in obj) {
ret_arr.push(key);
}
Logger.log(ret_arr)
for (var i = 0; i < ret_arr.length; i ++) {
if (ret_arr.indexOf(sheetss[i]) == -1) { // what is wrong with this getName function?
activess.deleteSheet(sheetss[i])
}
}
}
Когда я запускаю этот код, он удаляет все вкладки, существующие в текущем листе Google. Предполагается удалить вкладки, если фактическое имя вкладки отсутствует в этом массиве ret_arr.
Таким образом, в основном логика заключается в следующем: а) сравнить листы [i] с ret_arr
б) Если элементы в листах [i] не найдены в массиве ret_arr, удалите эту вкладку соответствующим образом.
- Примечание: когда я пытаюсь сделать это с помощью функции ".getName ()", возвращается сообщение о невозможности получить .getName () с неопределенным значением.
Пример ниже ...
for (var i = 0; i < ret_arr.length; i ++) {
if (ret_arr.indexOf(sheetss[i].getName()) == -1) { // what is wrong with this getName function?
activess.deleteSheet(sheetss[i])
}
}
}
Может кто-нибудь предложить мне, где мне следует исправить, чтобы он мог удалить только соответствующие вкладки?