четверг, 3 апреля 2014 г.

Скрипт CollectFiles

В прошлом сообщении описала скрипт, для сбора файлов из таблицы по ссылкам. Немного его доработала.
Теперь достаточно иметь в таблице один столбец "URL". Скрипт сканирует столбец таблицы, содержащий ссылки на документы, таблицы, презентации и прочие файлы, размещенные на Google Drive и копирует все эти файлы в одну папку. 
Для этого на вашем диске Google будет создана новая папка "NewFolder". После окончания работы скрипта, в нее также будет помещен файл "Error Report.html", содержащий список ссылок, по которым не удалось скопировать файлы. Также ячейки, содержащие эти ссылки будут отмечены красным цветом в исходной таблице. 

Скрипт опубликован, надеюсь, будет доступен для поиска. Кому нужен, вот исходный код:

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);
};
view raw CollectFiles hosted with ❤ by GitHub


Комментариев нет:

Отправить комментарий