将一个谷歌云端硬盘文件夹中的所有照片插入谷歌表格中?

问题描述 投票:0回答:4

我不太擅长编码,只够聪明地稍微修改一下代码。但我希望有人能帮助我。我希望将 google 文件夹中的所有图像上传到带有脚本的电子表格中。我需要根据单元格更改文件夹名称,因此我可以将单元格的名称更改为不同的文件夹,运行脚本,脚本将引入该文件夹中的所有照片。有些文件夹可能有 5 张照片,其他文件夹可能有 25 张照片。我已经能够弄清楚,但前提是我引用实际照片,而不仅仅是引用文件夹的名称并将其全部导入。提前感谢所有帮助。

google-apps-script google-sheets drive
4个回答
1
投票
function insertImages() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const nameF = 'Folder'; // Sheet Name of the sheet containing the Folder Name
  const rangeF = 'A1'; // Cell containing the Folder Name
  const nameT = 'Target'; // Sheet Name of the sheet to insert images
  let row = 2; // Starting row to insert
  const col = 1; // Column to insert
  
  const sheet = ss.getSheetByName(nameT);
  const folderName = ss.getSheetByName(nameF).getRange(rangeF).getValue();
  const folders = DriveApp.getFoldersByName(folderName);
  while (folders.hasNext()) {
    const folder = folders.next();
    const files = folder.getFiles();
    while (files.hasNext()) {
      const file = files.next();
      sheet.insertImage(file.getBlob(), col, row++);
    }
  }
}

0
投票

通过ID

function importImgs1() {
  var folderID = '1ZfWEnxtKQiuz8V9j2ckgIZRHRMmYc7rH';
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('import images');
  sh.clear();
  sh.appendRow(["name", "image"]);
  var folder = DriveApp.getFolderById(folderID);
  var data = [];
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    data = [ 
      file.getName(),
      "=image(\"https://docs.google.com/uc?export=download&id=" + file.getId() +"\")",
    ];
    sh.appendRow(data);
  }
}

按名字

function importImgs2() {
  var folderName = 'img';
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('import images by name');
  sh.clear();
  sh.appendRow(["name", "image"]);
  var folders = DriveApp.getFoldersByName(folderName);
  var foldersnext = folders.next();
  var data = [];
  var files = foldersnext.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    data = [ 
      file.getName(),
      "=image(\"https://docs.google.com/uc?export=download&id=" + file.getId() +"\")",
    ];
    sh.appendRow(data);
  }
}

0
投票

有效,只是通过应用程序脚本启动很烦人,所以 chatgpt 继续并添加了一些输入信息的提示

// This function is executed when the spreadsheet is opened, adding a custom menu.
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Creates a new menu in the Google Sheets UI
  ui.createMenu('Image Importer')
    .addItem('Start Import', 'importImgs1') // Adds an item to the menu with a function to call
    .addToUi(); // Finally adds the menu to the UI
}

function importImgs1() {
  var ui = SpreadsheetApp.getUi(); // Get the UI environment to prompt the user

  // Prompt for the Sheet name
  var sheetNamePrompt = ui.prompt(
    'Sheet Name Required',
    'Please enter the name of the Sheet where you want to import images:',
    ui.ButtonSet.OK_CANCEL);

  // Check if the user clicked "OK"
  if (sheetNamePrompt.getSelectedButton() !== ui.Button.OK) {
    ui.alert('Import Cancelled', 'You did not enter a sheet name. The import process has been cancelled.', ui.ButtonSet.OK);
    return;
  }
  
  var sheetName = sheetNamePrompt.getResponseText();
  
  // Prompt for the folder ID
  var folderIDPrompt = ui.prompt(
    'Folder ID Required',
    'Please enter the Google Drive Folder ID where your images are stored:',
    ui.ButtonSet.OK_CANCEL);

  // Check if the user clicked "OK"
  if (folderIDPrompt.getSelectedButton() !== ui.Button.OK) {
    ui.alert('Import Cancelled', 'You did not enter a folder ID. The import process has been cancelled.', ui.ButtonSet.OK);
    return;
  }
  
  var folderID = folderIDPrompt.getResponseText();

  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  if (!sh) {
    ui.alert('Error', 'The sheet name you entered does not exist. Please check and try again.', ui.ButtonSet.OK);
    return; // Exit the function if the sheet does not exist
  }
  
  sh.clear(); // Clear existing content on the sheet
  sh.appendRow(["name", "image"]); // Append header row
  
  try {
    var folder = DriveApp.getFolderById(folderID); // Attempt to get the folder with the provided ID
    var data = [];
    var files = folder.getFiles(); // Get all files within the folder
    while (files.hasNext()) {
      var file = files.next();
      data = [ 
        file.getName(),
        "=image(\"https://docs.google.com/uc?export=download&id=" + file.getId() +"\")",
      ];
      sh.appendRow(data); // Append each file's data as a new row
    }
    ui.alert('Import Complete', 'Images have been successfully imported.', ui.ButtonSet.OK);
  } catch(e) {
    ui.alert('Error', 'Invalid Folder ID or an error occurred. Please check the Folder ID and try again.', ui.ButtonSet.OK);
  }
}

0
投票

将文件夹中的所有图像插入电子表格中。我只用 jpeg 图像测试过这个

function getImages() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const sh1 = ss.getSheetByName("Sheet1");//I need another sheet to force the images to the top layer
  var lr = sh.getLastRow();
  const hdr = ["FileName","FileId","FileType","Image"]
  if(lr == 0) sh.getRange(1,1,1,hdr.length).setValues([hdr]);
  const folder = DriveApp.getFolderById(gobj.globals.testfolderid);
  const files = folder.getFiles();
  var types = ["image/jpeg","image/png","image/bmp","image/gif"];//you may wish to edit this
  var fA = [];
  while (files.hasNext()) {
    let file = files.next();
    let type = file.getMimeType();
    if (~types.indexOf(type)) {
      lr = sh.getLastRow();
      sh.getRange(lr + 1, 1, 1, 3).setValues([[file.getName(),file.getId(),file.getMimeType()]]);
      let bs = Utilities.newBlob(file.getBlob().getBytes(),file.getMimeType(),file.getName());
      sh.insertImage(bs,4,lr + 1).setWidth(100).setHeight(100);
    }
    sh1.activate();
    SpreadsheetApp.flush()
    sh.activate();//for some reason images do not appear to be on the correct layer without doing this.
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.