В прошлом сообщении описала скрипт, для сбора файлов из таблицы по ссылкам. Немного его доработала.
Для этого на вашем диске Google будет создана новая папка "NewFolder". После окончания работы скрипта, в нее также будет помещен файл "Error Report.html", содержащий список ссылок, по которым не удалось скопировать файлы. Также ячейки, содержащие эти ссылки будут отмечены красным цветом в исходной таблице.
Скрипт опубликован, надеюсь, будет доступен для поиска. Кому нужен, вот исходный код:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getIdfromUrl(url) { | |
var strUrl = String(url); | |
var pos = strUrl.indexOf('&usp=sharing'); | |
if (pos<0) { | |
pos = strUrl.indexOf('/edit'); | |
if (pos<0) { | |
pos = strUrl.length; | |
} | |
} | |
var posFirst = -1; | |
for(var i=0; i<pos; i++) { | |
if(strUrl[i]==="/" || strUrl[i]==="=" || strUrl[i]==='?' || strUrl[i]==='&') { | |
posFirst = i; | |
} | |
} | |
var id = strUrl.substring(posFirst+1, pos); | |
return id; | |
} | |
function copyFiles() { | |
var folder = DriveApp.createFolder('NewFolder'); | |
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT); | |
var sheet = SpreadsheetApp.getActiveSheet(); | |
var rows = sheet.getDataRange(); | |
var numRows = rows.getNumRows(); | |
var numCols = rows.getNumColumns(); | |
var titleRange = SpreadsheetApp.getActiveSheet().getRange(1, 1, 1, numCols); | |
var titles = titleRange.getValues(); | |
var urlColumn = -1; | |
for (var i = 0; i <= numCols-1; i++) { | |
if (titles[0][i] === 'URL') { | |
urlColumn = i; | |
} | |
} | |
if(urlColumn>=0){ | |
var report = '<html><body><h1>Incorrect URLs</h1><br>'; | |
var range = SpreadsheetApp.getActiveSheet().getRange(2, urlColumn+1,numRows-1, 1); | |
var values = range.getValues(); | |
for (var i = 0; i <= numRows - 2; i++) { | |
var currentId = getIdfromUrl(values[i]) | |
Logger.log(currentId); | |
var doc = null; | |
try { | |
doc = null; | |
var file = DriveApp.getFileById(currentId); | |
file.makeCopy(folder).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); | |
} | |
catch (e) { | |
var file = null; | |
Logger.log('Incorrect ID' + currentId); | |
report = report + values[i]+'<br>'; | |
SpreadsheetApp.getActiveSheet().getRange(2+i, urlColumn+1,1, 1).setBackgroundColor("red"); | |
} | |
} | |
report = report + '</body></html>'; | |
folder.createFile('Error Report.html', report, 'application/xml'); | |
} | |
}; | |
function showHelp() { | |
var app = UiApp.createApplication().setHeight("300").setWidth("300").setTitle('Help'); | |
var label1 = app.createLabel("Script scans all URLs in column, create a NewFolder on your Google Drive and copies all files there."); | |
var label2 = app.createLabel("Important! Should be present column URL on active sheet."); | |
var label3 = app.createLabel("Cell will be colored in red if it contains an invalid URL"); | |
app.add(label1); | |
app.add(label2); | |
app.add(label3); | |
SpreadsheetApp.getActiveSpreadsheet().show(app); | |
} | |
function onOpen() { | |
var sheet = SpreadsheetApp.getActiveSpreadsheet(); | |
var entries = [{ name : "Copy all files to the NewFolder", functionName : "copyFiles"}, | |
{ name: "Help", functionName: "showHelp"}]; | |
sheet.addMenu("Copy files", entries); | |
}; |
Комментариев нет:
Отправить комментарий