Telecharger fichier depuis un lien hypertexte

Bonjour a toutes et tous !

j'ai un fichier avec des centaines de lien hypertxt qui pointent sur
des fichiers (.jpeg) et j'aimerais savoir s'il est possible de lancer une
macro qui irait chercher chaque fichier et les enregistrer dans un
repertoire sur mon PC en local

De plus, lorsque que ce fichier s'enregistre dans un dossier en local il doit créer un sous dossier et renommer ce fichier comme dans l'exemple ci-après

ex : la racine du dossier se situe dans C:\Users\LUDO\Pictures\BABEL

enreg ds dossierlien hypertexte serveur distant 1nom du fichierlien hypertexte serveur distant 2nom du fichier

riri

h ttps://www........Cuisineh ttps://www.......123
fifih ttps://www........garageh ttps://www.......abc
loulouh ttps://www........terrainh ttps://www.......papa

ce qui dans mon exemple : quand je rentre dans le dossier BABEL sur mon PC je devrai retrouver les sous dossiers suivants :

- sous dossier riri avec les images téléchargées et renommées Cuisine et 123 (si il y a 8 fichiers a télécharger sur cette ligne alors 8 images renommées...)

- sous dossier fifi avec les images téléchargées et renommées garage et abc

- sous dossier loulou avec les images téléchargées et renommées terrain et papa

A votre avis cela est-il possible ?

Par avance merci pour vos retours

Cordialement Ludovic

Bonjour,

peux-tu confirmer que tu utilises bien GSheets ?

bonjour

oui pourquoi ?

j'utilise Google sheet car il est rattaché à un formulaire en ligne mais je souhaiterai justement rapatrier les images sur mon pc ....

je ne suis pas un pro .....

ok merci pour ta réponse

bonjour

oui pourquoi ?

car il arrive que certains postent dans la mauvaise rubrique, et comme ton profil mentionne 2007 FR

et puis avec excel je sais faire ... mais surtout avec GSheets ce n'est techniquement pas possible (sauf erreur de ma part). Tu ne peux pas télécharger en soi, car tu n'as pas accès aux ressources de ton PC (par exemple, le système de fichiers) depuis apps-script. Le fichier est toujours dans "le cloud"... GoogleSheets est un système connecté et tout le travail de script se fait sur le serveur.

Bonjour

merci pour votre réponse !

en fait j'utilise les deux en fonction de mon utilité. Dans ce cas ci j'utilise un formulaire en ligne auquel j'ai pû intégrer google sheet pour accéder aux réponses en instantané mais le formulaire me donne aussi la possibilité de télécharger directement les données brutes au format excel ou csv donc si vous savez faire (ce qui serai super !!!) dites le moi, je clôture ce post et l'ouvre au bon endroit ou en privé au chois dites moi

dans l'attente de vous lire

cordialement,

Encore une fois, je pense ne pas me tromper en disant que GSheets ne peut pas enregistrer quoi que ce soit sur le disque dur, il n'a pas accès au répertoire (à part des cookies comme pour un site internet et des fichiers temporaires).

Pour ce qui est d'excel, poste en effet un nouveau sujet. Tout ce que j'ai en stock c'est un script de ce type :

  • pour des images déjà contenues dans une feuille excel
Sub copie_images()

Dim Pict
Dim chrt As ChartObject
   'getting width and height of picture so the chart can be sized correctly
   'if the chart has an other size the picture will be scaled to fit inside the chart area

   For Each Pict In Worksheets("Feuil1").Pictures
      Pict.CopyPicture
      W = Pict.Width
      H = Pict.Height
      Set chrt = ActiveSheet.ChartObjects.Add(0, 0, W, H)
      Pict.CopyPicture
      chrt.Border.LineStyle = 1      'no border around chart (and picture)
      chrt.Select
      ActiveChart.Paste
      chrt.Chart.Export ThisWorkbook.Path & "\" & Pict.Name & ".jpg", "JPG"

      nb = Worksheets("Feuil1").ChartObjects.Count
      Worksheets("Feuil1").ChartObjects(nb).Delete
   Next Pict

End Sub
  • pour des images distantes, en ayant leur url, ce sera encore plus simple.

Bonjour,

@Mike

il est possible de faire un takeout

https://takeout.google.com/

pour sauvegarder le contenu sur l'ordinateur

je suis content si ça aide ;)))

ah super merci pour vos retour !!!!

sinon, ne peut-on pas le faire depuis google sheet mais dans ce cas utiliser google drive pour déposer les sous dossiers (+fichiers jpeg renommés) dans deux dossiers que j'aurais crée ? je n'aurais dans ce cas plus qu'à transférer ça sur mon PC pour traitement par paquet ultérieurement ?

qu'en pensez-vous ?

je précise que oui j'ai les urls donc si on peut simplifier cela

exemple fonctionnel

function copyImageFromUrlToDrive() {
  url='http://www.villa-safran.fr/img/slider/bg-1.jpg'
  var reponse = UrlFetchApp.fetch(url).getBlob()
  DriveApp.createFile(reponse)
}

tu peux ensuite faire un moveTo un dossier spécifique

Bonjour Mikhail Staliyevich

un grand merci d'avoir pris le temps de répondre et me fournir des éléments concret

malheureusement je ne suis qu'un modeste petit débutant et les formules que vous me donnez je ne sais pas le faire ... aussi je vais voir si je peux trouver une personne qui pourra m'aider (avec rémunération bien sûr )

Si vous ou une âme charitable peux m'aider sur les étapes pas a pas ...

bien évidement je transmettrai le lien vers la feuille google sheet et le formulaire pour que la personne puisse réellement voir comment intégrer GS

en tous cas encore un grand merci pour votre retour !!!!

cordialement,

passe moi les élements en mp

Pour chacune des images importées, fais une boucle pour lancer cette fonction :

function copieImageVersDossier(url,dossierId){
  var reponse = UrlFetchApp.fetch(url).getBlob()
  var image = DriveApp.createFile(reponse)
  var imageId = image.getId()
  transfertFichier(imageId,dossierId)
}
function transfertFichier(fichierId, dossierId) {
  var fichier = DriveApp.getFileById(fichierId);
  var dossier = DriveApp.getFolderById(dossierId);
  fichier.moveTo(dossier);
}

Il faut que ton dossier soit identifié par son ID et non son nom qui pourrait être multiple. Le mieux est donc d'entretenir une table des dossiers noms > ID dans ta feuille une fois pour toutes. A moins qu'il faille créer un dossier automatiquement ?

Pour créer un dossier si inexistant et récupérer son id

function getFolderId(name){
  var id;
  var dossiers = DriveApp.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = folders.next();
    id = dossier.getId(); }
  else {
    var dossier = DriveApp.createFolder(name);
    id = dossier.getId();
  }
  return id;
}

Pour extraire une url

=REGEXEXTRACT(A1,"http[\S]+")

ou en script

function http(code){
  return 'http'+code.match(/(?<=http).*/g)[0]
}

Pour les dossiers ...

function creerParentEnfant(){
  var idDossierEnfant = getEnfantId(getParentId('papa'),'toto')
}
function getParentId(name){
  // avec création si inexistant dans le drive
  var id;
  var dossiers = DriveApp.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId(); }
  else {
    var dossier = DriveApp.createFolder(name);
    id = dossier.getId();
  }
  return id;
}
function getEnfantId(parentId,name){
  // avec création si inexistant dans le dossier parent
  var parent = DriveApp.getFolderById(parentId);
  var id;
  var dossiers = parent.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId(); }
  else {
    var dossier = parent.createFolder(name);
    id = dossier.getId();
  }
  return id;
}

Voici l'assemblage des scripts

Il faut choisir la ligne après avoir lancé le script par le menu en haut à gauche : mets le script dans l'éditeur de macro, ferme et rouvre à nouveau le fichier

const feuille = 'maFeuille' // à modifier

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('**Images**')
    .addItem('Importer les images', 'importerImage')
    .addToUi();
}
function importerImage(){
  var f=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(feuille)
  var num = numLigne()
  if (num > 1){
    var data = f.getRange('C'+num+':T'+num).getValues()
    var enfant = data[0][0]
    var parent = data[0][1]
    var id = getEnfantId(getParentId(parent),enfant)
    for (var i=1;i<=8;i++){
      if (data[0][2*i]!='' && data[0][2*i+1]!=''){
        var url = http(data[0][2*i])
        var nom = data[0][2*i+1]
        copierImageVersDossier(url,id,nom)
      }
    }
  }
}
function numLigne() {
  const ui = SpreadsheetApp.getUi();
  const resultat = ui.prompt('Entrez le numéro de ligne à traiter :');
  var num = resultat.getResponseText()
  if (isNaN(num)){return 0}else{return num}
}
function getParentId(name){
  // avec création si inexistant dans le drive
  var id;
  var dossiers = DriveApp.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId(); }
  else {
    var dossier = DriveApp.createFolder(name);
    id = dossier.getId();
  }
  return id;
}
function getEnfantId(parentId,name){
  // avec création si inexistant dans le dossier parent
  var parent = DriveApp.getFolderById(parentId);
  var id;
  var dossiers = parent.getFoldersByName(name);
  if (dossiers.hasNext()) {
    var dossier = dossiers.next();
    id = dossier.getId(); }
  else {
    var dossier = parent.createFolder(name);
    id = dossier.getId();
  }
  return id;
}
function http(code){
  return 'http'+code.match(/(?<=http).*/g)[0]
}
function copierImageVersDossier(url,dossierId,nomImage){
  var reponse = UrlFetchApp.fetch(url).getBlob()
  var image = DriveApp.createFile(reponse)
  var imageId = image.getId()
  var file = DriveApp.getFileById(imageId)
  file.setName(nomImage)
  transfererFichier(imageId,dossierId)
}
function transfererFichier(fichierId, dossierId) {
  var fichier = DriveApp.getFileById(fichierId);
  var dossier = DriveApp.getFolderById(dossierId);
  fichier.moveTo(dossier);
}

Bonjour et Wahou !

merci beaucoup !!! je vais suivre vos instructions et je ne vais pas manquer de vous tenir informé !!!

encore merci

Rechercher des sujets similaires à "telecharger fichier lien hypertexte"