Как создать скрипт Google в листах Google, который будет создавать гиперссылки на видеофайлы на диске Google - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть лист Google с около 20 столбцами данных, связанных с видеофайлом.Видео файлы из игр из футбольного матча.Видеофайлы находятся на диске Google с именем m0001.mp4 до m0124.mp4 по порядку.Предполагая, что для этой игры у меня есть 124 видеофайла (игры) для этой игры.Для некоторых игр это может быть от m00356.mp4 до m00495.mp4 и т. Д.

Я делал это раньше в Excel, используя макросы, и указывал в имени первый файл и количество файлов, и он автоматически пользовался гиперссылками навидео файлы.

Как я могу сделать то же самое, используя скрипты?

Это был мой макрос из Excel:

Sub nbsl()
Dim FldrLoc As String:  FldrLoc = "m:\2011 season\nbsl\"
    Dim rngAnchor As Range
    Dim CurrentFile As String:  CurrentFile = Dir(FldrLoc)
    Do While CurrentFile <> vbNullString
        Set rngAnchor = ActiveSheet.Range("V" & Rows.Count).End(xlUp).Offset(1, 0)
        ActiveSheet.Hyperlinks.Add Anchor:=rngAnchor, _
                            Address:=FldrLoc & CurrentFile, _
                            TextToDisplay:=CurrentFile
        CurrentFile = Dir()
    Loop
End Sub

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

СОРТИРОВКА ВЫХОДА

Этот код предлагается в виде фрагмента кода, чтобы показать, как результаты могут быть отсортированы в порядке имен.Код, как написано, состоит из двух частей;первая часть сортирует результаты в столбце AC, прежде чем начать вывод для столбца AD.Это не является строго необходимым, и вся сортировка может быть объединена


Колонка сортировки AC

  i++
  }
  // end of the first WHILE loop.

  // START OF THE SORTING CODE-Column AC
  // get the number of rows of content in Column AC
  var ACvals = ss.getRange("AC2:AC").getValues();
  var AClast = ACvals.filter(String).length;
  // Logger.log("DEBUG: AClast = "+AClast);  //DEBUG

  //  create a range
  var range = sheet.getRange(2, 29, AClast);
  // Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG

  // sort the range by file name
  range.sort({
    column: 29,
    ascending: true
  });

// END OF THE SORTING CODE-Column AC
i = 2;
// start of the second WHILE loop

Колонка сортировки AD

  i++
  }
  // end of the second WHILE loop. 
  // START OF THE SORTING CODE-Column AD
  // get the number of rows of content in Column AD
  var ADvals = ss.getRange("AD2:AD").getValues();
  var ADlast = ADvals.filter(String).length;
  // Logger.log("DEBUG: ADlast = "+ADlast);  //DEBUG

  //  create a range
  var range = sheet.getRange(2, 30, ADlast);
  // Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG

  // sort the range by file name
  range.sort({
    column: 30,
    ascending: true
  });
  // END OF THE SORTING CODE-Column AD
  }
0 голосов
/ 07 марта 2019

У меня есть два решения, которые сработали.Я опубликую оба ниже:

Вариант 1) Позволяет вам называть ссылки не именем файла:

function getFiles() {

  var dApp = DriveApp;
  var vfolder = dApp.getFoldersByName("video").next();
  var yearfolder = vfolder.getFoldersByName("2018").next();
  var gamefolder = yearfolder.getFoldersByName("game2").next();
  var folderez = gamefolder.getFoldersByName("ez").next();
  var foldersl = gamefolder.getFoldersByName("sl").next();
  var ezIter = folderez.getFiles();
  var slIter = foldersl.getFiles();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(yearfolder+gamefolder);
  var i = 2;
  var files = [];

  while (ezIter.hasNext()) {
    files.push(ezIter.next());
} 

// sorts the files array by file names alphabetically
files = files.sort(function(a, b){
    var aName = a.getName().toUpperCase();
    var bName = b.getName().toUpperCase();

    return aName.localeCompare(bName);
});

files.forEach(function(file){
    var name = file.getName();
    var url = file.getUrl();
    range = 'AC'+(i);
    var filename = 'ezvideo'+(i-1);
    var semi = ";";  
    var hyp = "=hyperlink(\"";
    var quot = "\"";
    var clos = ")";
    var title = hyp  + url + quot + semi + quot + filename + quot + clos;  // str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    ss.getRange(range).setValue(title);   
    i++;
});

  var i = 2;
  var files = [];
while (slIter.hasNext()) {
    files.push(slIter.next());
}

// sorts the files array by file names alphabetically
files = files.sort(function(a, b){
    var aName = a.getName().toUpperCase();
    var bName = b.getName().toUpperCase();

    return aName.localeCompare(bName);
});

files.forEach(function(file){
    var name = file.getName();
    var url = file.getUrl();
    range = 'AD'+(i);
    var filename = 'slvideo'+(i-1);
    var semi = ";";  
    var hyp = "=hyperlink(\"";
    var quot = "\"";
    var clos = ")";
    var title = hyp  + url + quot + semi + quot + filename + quot + clos;  // str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    ss.getRange(range).setValue(title);   
    i++;
});
}

Или Вариант 2;который требует, чтобы вы использовали имена файлов для сортировки:

function getFiles() {

  var dApp = DriveApp;
  var vfolder = dApp.getFoldersByName("video").next();
  var yearfolder = vfolder.getFoldersByName("2018").next();
  var gamefolder = yearfolder.getFoldersByName("game1").next();
  var folderez = gamefolder.getFoldersByName("ez").next();
  var foldersl = gamefolder.getFoldersByName("sl").next();
  var ezIter = folderez.getFiles();
  var slIter = foldersl.getFiles();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(yearfolder+gamefolder);

  var i = 2;

  while (ezIter.hasNext()) {
    var file = ezIter.next();
    var name = file.getName(); // use this or the created filename below
    var url = file.getUrl();
    range = 'AC'+(i);
    var filename = 'ezvideo'+(i-1);
    var semi = ";";  
    var hyp = "=hyperlink(\"";
    var quot = "\"";
    var clos = ")";
    var title = hyp  + url + quot + semi + quot + name + quot + clos;  // str='=hyperlink("' + f.getUrl() + '","' + f.getName() + '")';
    ss.getRange(range).setValue(title);   
    i++;
}

  // START OF THE SORTING CODE-Column AC
  // get the number of rows of content in Column AC
  var ACvals = ss.getRange("AC2:AC").getValues();
  var AClast = ACvals.filter(String).length;
  // Logger.log("DEBUG: AClast = "+AClast);  //DEBUG
  //  create a range
  var range = ss.getRange(2, 29, AClast);
  // Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG
  // sort the range by file name
  range.sort({
    column: 29,
    ascending: true
  });

// END OF THE SORTING CODE-Column AC  


  i = 2;
  while (slIter.hasNext()) {
    var file = slIter.next();
    var name = file.getName();
    var url = file.getUrl();
    range = 'AD'+(i);
    var filename = 'slvideo'+(i-1);
    var title = hyp  + url + quot + semi + quot + file + quot + clos;
    ss.getRange(range).setValue(title);  
    i++;
}

    // end of the second WHILE loop. 
  // START OF THE SORTING CODE-Column AD
  // get the number of rows of content in Column AD
  var ADvals = ss.getRange("AD2:AD").getValues();
  var ADlast = ADvals.filter(String).length;
  // Logger.log("DEBUG: ADlast = "+ADlast);  //DEBUG

  //  create a range
  var range = ss.getRange(2, 30, ADlast);
  // Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG

  // sort the range by file name
  range.sort({
    column: 30,
    ascending: true
  });
  // END OF THE SORTING CODE-Column AD
}

Спасибо всем за помощь !!

0 голосов
/ 04 марта 2019

Благодаря @Tednioz & @Niek Waarbroek я смог понять большую часть этого.

Ниже мой код.

function getFiles() {

  var dApp = DriveApp;
  var vfolder = dApp.getFoldersByName("video").next();
  var yearfolder = vfolder.getFoldersByName("2018").next();
  var gamefolder = yearfolder.getFoldersByName("game1").next();
  var folderez = gamefolder.getFoldersByName("ez").next();
  var foldersl = gamefolder.getFoldersByName("sl").next();
  var ezIter = folderez.getFiles();
  var slIter = foldersl.getFiles();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(yearfolder+gamefolder);

  var i = 2;

  while (ezIter.hasNext()) {
    var file = ezIter.next();
    var name = file.getName();
    var url = file.getUrl();
    range = 'AC'+(i);
    ss.getRange(range).setValue(url);
    i++
}

  i = 2;
  while (slIter.hasNext()) {
    var file = slIter.next();
    var name = file.getName();
    var url = file.getUrl();
    range = 'AD'+(i);
    ss.getRange(range).setValue(url);
    i++
}
}

Есть несколько вещей, которые я не смог выяснить 1) Есть ли способ использовать полный путь к файлам, если вы его знаете?Пример: "Driveroot: \ video \ 2018 \ game1 \ sl"

2) Можно ли сделать так, чтобы ссылки отображались как просто имя файла, а не как полный URL?

3) Есть ли способ автоматически воспроизводить видео и смотреть его, когда вы нажимаете на гиперссылку?

4) Файлы будут иметь имена dms0001, dms0002, ..... скажем, dms0189.Это не тот порядок, в который они загружаются.Есть ли способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...