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