使用 Class CellImageBuilder 将图像导入 Google Sheets 单元格
Using Class CellImageBuilder to import Image into Google Sheets cell
2022 年 1 月 19 日,CellImageBuilderclass 被添加到 Google Sheets Spreadsheet 服务中。
此 class 现在允许您将图像导入 Google 表格中的单元格,以前您只能在单元格上方添加图像。
我一直在尝试使用这个新的 class 从 Google sheet 中获取 URL link,然后在URL 旁边的单元格。如果我可以将 URL 硬编码到脚本中(下面的示例)
,这将非常有效
**function insertImageIntoCell()**
{
var sheet = SpreadsheetApp.getActiveSheet();
var url='Google_Docs_Image_URL'
let image = SpreadsheetApp.newCellImage().setSourceUrl(url).setAltTextDescription('TestImage').toBuilder().build();
SpreadsheetApp.getActive().getActiveSheet().getRange('C2').setValue(image);
}
我遇到的问题是,一旦我创建了一个数组来遍历列,下面的脚本就会创建一个有效的数组并将其发布到正确的列和行中,但是当它发布回传播时sheet 它仅 returns URL 并且不会将其转换为单元格中的图像
**function insertImageIntoCell()**
{
var sheet = SpreadsheetApp.getActiveSheet();
var myStringArray = sheet.getRange('B2:B10');
var myStringArray = sheet.getRange('B2:B10').getValues();
//Logger.log(myStringArray)
let image = SpreadsheetApp.newCellImage().setSourceUrl(myStringArray).setAltTextDescription('test').toBuilder().build();
SpreadsheetApp.getActive().getActiveSheet().getRange('C2:C10').setValues(myStringArray);
}
我使用以下代码创建初始 table 数据,这会从 Google 驱动器位置提取文件名和下载 URL,然后将其保存到 sheet
/* modified from @hubgit and
for this stackexchange question http://webapps.stackexchange.com/questions/86081/insert-image-from-google-drive-into-google-sheets by @twoodwar
*/
function listFilesInFolder(folderName) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name","URL","Image"]);
//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("Google_Drive_Folder");
var contents = folder.getFiles();
let image=[];
var cnt = 0;
var file;
while (contents.hasNext()) {
var file = contents.next();
cnt++;
data = [
file.getName(),
file.getDownloadUrl(),
];
sheet.appendRow(data);
};
};
我正在寻找脚本将文件信息从 Google 驱动器刷新到 sheets,然后将图像保存到单元格中,现在看来这个功能存在,但我无法让它获取 URL 的
数组
更新:
- 此问题已归档。为 this issue 添加一颗星,以便 Google 开发人员优先解决此问题。
问题:
setValues()
不适用于 CellImage
,而 setValue()
可以。
If/when 它开始工作,您需要使用 map 将每个值转换为 cellImage
:
function insertImagesIntoCell() {
const sheet = SpreadsheetApp.getActiveSheet(),
range = sheet.getRange('B2:B10');
range.setValues(
range.getValues().map(url => [
SpreadsheetApp.newCellImage()
.setSourceUrl(url[0])
.build(),
])
);
}
建议
也许您可以尝试下面的示例实现。
示例调整脚本
function listFilesInFolder(folderName){
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name","URL","Image"]);
//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("DRIVE_FOLDER_ID");
var contents = folder.getFiles();
let image=[];
var cnt = 0;
var file;
while (contents.hasNext()) {
var file = contents.next();
cnt++;
data = [
file.getName(),
file.getDownloadUrl(),
];
sheet.appendRow(data);
};
insertImageIntoCell(); //Insert the images on column C
};
function insertImageIntoCell(){
var sheet = SpreadsheetApp.getActiveSheet();
var row = 1;
sheet.getDataRange().getValues().forEach(url =>{
if(url[1] == "URL")return row += 1;
let image = SpreadsheetApp.newCellImage().setSourceUrl(url[1]).setAltTextDescription('TestImage').toBuilder().build();
SpreadsheetApp.getActive().getActiveSheet().getRange('C'+row).setValue(image);
row += 1;
});
}
带有示例图像的示例驱动器文件夹
示例结果:
- 在 运行 函数之后
listFilesInFolder
:
2022 年 1 月 19 日,CellImageBuilderclass 被添加到 Google Sheets Spreadsheet 服务中。
此 class 现在允许您将图像导入 Google 表格中的单元格,以前您只能在单元格上方添加图像。
我一直在尝试使用这个新的 class 从 Google sheet 中获取 URL link,然后在URL 旁边的单元格。如果我可以将 URL 硬编码到脚本中(下面的示例)
,这将非常有效**function insertImageIntoCell()**
{
var sheet = SpreadsheetApp.getActiveSheet();
var url='Google_Docs_Image_URL'
let image = SpreadsheetApp.newCellImage().setSourceUrl(url).setAltTextDescription('TestImage').toBuilder().build();
SpreadsheetApp.getActive().getActiveSheet().getRange('C2').setValue(image);
}
我遇到的问题是,一旦我创建了一个数组来遍历列,下面的脚本就会创建一个有效的数组并将其发布到正确的列和行中,但是当它发布回传播时sheet 它仅 returns URL 并且不会将其转换为单元格中的图像
**function insertImageIntoCell()**
{
var sheet = SpreadsheetApp.getActiveSheet();
var myStringArray = sheet.getRange('B2:B10');
var myStringArray = sheet.getRange('B2:B10').getValues();
//Logger.log(myStringArray)
let image = SpreadsheetApp.newCellImage().setSourceUrl(myStringArray).setAltTextDescription('test').toBuilder().build();
SpreadsheetApp.getActive().getActiveSheet().getRange('C2:C10').setValues(myStringArray);
}
我使用以下代码创建初始 table 数据,这会从 Google 驱动器位置提取文件名和下载 URL,然后将其保存到 sheet
/* modified from @hubgit and
for this stackexchange question http://webapps.stackexchange.com/questions/86081/insert-image-from-google-drive-into-google-sheets by @twoodwar
*/
function listFilesInFolder(folderName) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name","URL","Image"]);
//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("Google_Drive_Folder");
var contents = folder.getFiles();
let image=[];
var cnt = 0;
var file;
while (contents.hasNext()) {
var file = contents.next();
cnt++;
data = [
file.getName(),
file.getDownloadUrl(),
];
sheet.appendRow(data);
};
};
我正在寻找脚本将文件信息从 Google 驱动器刷新到 sheets,然后将图像保存到单元格中,现在看来这个功能存在,但我无法让它获取 URL 的
数组更新:
- 此问题已归档。为 this issue 添加一颗星,以便 Google 开发人员优先解决此问题。
问题:
setValues()
不适用于CellImage
,而setValue()
可以。
If/when 它开始工作,您需要使用 map 将每个值转换为 cellImage
:
function insertImagesIntoCell() {
const sheet = SpreadsheetApp.getActiveSheet(),
range = sheet.getRange('B2:B10');
range.setValues(
range.getValues().map(url => [
SpreadsheetApp.newCellImage()
.setSourceUrl(url[0])
.build(),
])
);
}
建议
也许您可以尝试下面的示例实现。
示例调整脚本
function listFilesInFolder(folderName){
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name","URL","Image"]);
//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("DRIVE_FOLDER_ID");
var contents = folder.getFiles();
let image=[];
var cnt = 0;
var file;
while (contents.hasNext()) {
var file = contents.next();
cnt++;
data = [
file.getName(),
file.getDownloadUrl(),
];
sheet.appendRow(data);
};
insertImageIntoCell(); //Insert the images on column C
};
function insertImageIntoCell(){
var sheet = SpreadsheetApp.getActiveSheet();
var row = 1;
sheet.getDataRange().getValues().forEach(url =>{
if(url[1] == "URL")return row += 1;
let image = SpreadsheetApp.newCellImage().setSourceUrl(url[1]).setAltTextDescription('TestImage').toBuilder().build();
SpreadsheetApp.getActive().getActiveSheet().getRange('C'+row).setValue(image);
row += 1;
});
}
带有示例图像的示例驱动器文件夹
示例结果:
- 在 运行 函数之后
listFilesInFolder
: