我想创建一个脚本来批量签署一些 Google 文档。我的第一个想法是将带有签名的 Google 绘图存储在我的驱动器中,然后将其插入文档中。还有比这更好的主意吗?
谢谢你!
目前我没有编写任何代码,因为我不相信我的 Google Drawing 想法
我想创建一个脚本来批量签署一些 Google 文档。我的第一个想法是将带有签名的 Google 绘图存储在我的驱动器中,然后将其插入文档中。还有比这更好的主意吗?
谢谢你!
目前我没有编写任何代码,因为我不相信我的 Google Drawing 想法
如果 BD 列已填充或未填充,此脚本会尝试在 A 列中添加或删除复选框。如果该行的这三列中的每个单元格都已填充,则在 A 列中插入一个复选框。如果该行的这三列中的一个单元格未填充,则不会插入复选框。
A 列 = 复选框
B 栏 = 标题
C 列 = tstart
D 列 = tstop
function refreshCheckboxes(){
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet_name');
var rows = sheet.getDataRange().getValues();
var headers = rows.shift();
var checkbox = row[0]
var title = row[1];
var tstart = row[2];
var tstop = row[3];
for (var i = 0; i < rows.length; i++) {
if (rows[[title][tstart][tstop]] !== "") {
checkbox.insertCheckboxes();
} else {
checkbox.clearDataValidations();
checkbox.clearContent();
}
}
}
目前的结果:
设置行变量时发生ReferenceError: row is not Defined 。我不确定为什么会收到该错误,因为我有类似的函数以这种方式定义行变量。我对该脚本的另一个担心是如何设置 BD 列。数组在这里合适吗?有没有更好的方法来设置它?
期望的结果:
确定导致行定义错误的原因并进行更正。验证 AND() 功能是否有效。
我已经有一个 onEdit() ,它可以完美地工作,而不是一次只适用于一行,因此我想进行自定义以根据需要运行。
谢谢!
应用程序脚本文档似乎表明可以将表格从一张幻灯片复制到另一张幻灯片 - 但我似乎无法让它工作。这是我使用过的脚本 - 对我做错了什么有什么想法吗?这是“使用”中示例的链接。
* @OnlyCurrentDoc
*/
/*
Instructions copied from https://developers.google.com/apps-script/reference/slides/slide#insertShape(ShapeType)
// Copy a table between presentations.
var otherPresentationSlide = SlidesApp.openById('presentationId').getSlides()[0];
var currentPresentationSlide = SlidesApp.getActivePresentation().getSlides()[0];
var table = otherPresentationSlide.getTables[0];
currentPresentationSlide.insertTable(table); // Also available for Layout, Master, and Page.*/
function test(){
var slide2 = SlidesApp.getActivePresentation().getSlides()[1];
var table = SlidesApp.getActivePresentation.getPageElementById('g2c6eee07fad_0_0').asTable();
slide2.insertTable(table);
如何优化以下脚本?由于可能存在多个循环,它正在超时。循环按顺序排列:
1-循环访问所有 Google Ads 帐户。
2-循环遍历所有广告组。
3 - 在每个广告组中,检查是否有任何广告处于“已拒绝”状态。如果是,请将数据附加到 Google 表格。
function main() {
var sheetId = 'XXX';
var sheetName = 'XXX';
var spreadsheet = SpreadsheetApp.openById(sheetId);
var sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
sheet = spreadsheet.insertSheet(sheetName);
} else {
// Clear the existing contents
sheet.clearContents();
}
// Adding headers (column names)
var headers = ['Account Name', 'Campaign', 'Ad Group'];
sheet.appendRow(headers);
// Iterating through each client account
var accountIterator = AdsManagerApp.accounts().get();
while (accountIterator.hasNext()) {
var account = accountIterator.next();
AdsManagerApp.select(account);
var adGroupIterator = AdsApp.adGroups()
.withCondition('CampaignStatus = ENABLED')
.withCondition('AdGroupStatus = ENABLED')
.get();
while (adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();
// Check if the ad group has any disapproved ads
var disapprovedAdFound = false;
var adIterator = adGroup.ads().get();
while (adIterator.hasNext()) {
var ad = adIterator.next();
if (ad.getPolicyApprovalStatus() === 'DISAPPROVED') {
disapprovedAdFound = true;
break;
}
}
if (disapprovedAdFound) { // Disapproved ads found
// Record the details of the ad group with disapproved ads
sheet.appendRow([
account.getName(),
adGroup.getCampaign().getName(),
adGroup.getName()
]);
}
}
}
}
我将正确的表单 ID 和名称添加到此应用程序脚本中:
function openForm() {
var form = findFormByName('Comments');
if (form) {
populateQuestions(form);
} else {
Logger.log('Form not found');
}
}
function findFormByName(formName) {
var forms = FormApp.openById('1s0rjQIRY2i8CZsoxlu--TBR7q4b3wHxBslItWOMrc1s').getItems(FormApp.ItemType.FORM);
for (var i = 0; i < forms.length; i++) {
var form = forms[i].asForm();
if (form.getTitle() === formName) {
return form;
}
}
return null;
}
function populateQuestions(form) {
var googleSheetsQuestions = getQuestionValues();
var itemsArray = form.getItems(FormApp.ItemType.LIST);
if (googleSheetsQuestions.length > 0) {
var choiceArrayA = removeDuplicates(googleSheetsQuestions.map(function(row) {
return row[0] ? String(row[0]).trim() : '';
}));
if (itemsArray.length > 0) {
var question1 = itemsArray[0].asListItem();
question1.setChoiceValues(choiceArrayA);
}
}
}
function removeDuplicates(array) {
return array.filter((value, index, self) => self.indexOf(value) === index);
}
function getQuestionValues() {
var ss = SpreadsheetApp.openById('1OK0EIoGRD8RdQ4gOeCqy6ycT5Y-MvLZYXBvQo2MpJpI');
var questionSheet = ss.getSheetByName('Raw Data');
var returnData = questionSheet.getRange(2, 1, questionSheet.getLastRow() - 1, 2).getValues();
return returnData;
}
知道我做错了什么吗?我在与其他函数相关的其余代码中添加了前两个代码块所引用的代码。
编辑:图片显示我实施的解决方案无济于事。
我有一个投资资产的价格跟踪器,它已经使用 IMPORTXML 从网络自动更新。我在本工作簿中设置了另一个工作表,其中包括销售目标,并从价格跟踪表中提取当前价格。如果价格超过销售目标,我希望电子表格通过电子邮件发送给我,然后将保留列标记为“已发送”,以防止触发器重复发送电子邮件。
我已经快要让它工作了,但我一定错过了 Apps 脚本数组的一些基本内容。当我使用 console.log 从循环内记录时,我可以看到共有 4 个单元格被标记为“已发送”,而实际上只有其中一个单元格应该被标记为“已发送”。你能告诉我我做错了什么吗?
function sendEmail() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Sell Targets");
var SellTargetRange = sheet.getRange("W3:W");
var SellTarget = SellTargetRange.getValues();
var PriceRange = sheet.getRange("D3:D");
var Price = PriceRange.getValues();
var EmailSentRange = sheet.getRange("X3:X");
var EmailSent = EmailSentRange.getValues();
var lastRow = sheet.getLastRow();
for (var i = 0; i < (lastRow-1); i++) {
if ((SellTarget[i] < Price[i]) && (EmailSent[i] != "SENT")) {
//var emailAddress = "[email protected]";
//var subject = "subject";
//var message = "sell";
//MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange("X" + (i+3)).setValue("SENT");
console.log(EmailSent[i])
console.log(Price[i])
console.log(SellTarget[i])
}
}
}
我正在尝试修改此脚本,以将列中包含“名称”一词的整行复制到新工作表中。
得到“例外:范围内的行数必须至少为 1”,因此目前根本不起作用!有人可以帮忙吗?
谢谢
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Admin')
.addItem('Copy name rows', 'copyNameRows')
.addToUi();
}
function copyNameRows() {
const sourceSheet = SpreadsheetApp.getActive().getSheetByName('Source');
const targetSheet = SpreadsheetApp.getActive().getSheetByName('Target');
const dataValues = sourceSheet.getDataRange().getValues();
targetSheet.getRange(2,1,targetSheet.getLastRow() - 1, 28).clear();
var currentTargetRow = 2;
for (var i = 0 ; i < dataValues.length; i++) {
if (dataValues[0][24].toString().toLowerCase() == 'name' ||
dataValues[0][25].toString().toLowerCase() == 'name' ||
dataValues[0][26].toString().toLowerCase() == 'name' ||
dataValues[0][27].toString().toLowerCase() == 'name') {
sourceSheet.getRange(i + 1, 1, 1, 28).copyTo(targetSheet.getRange(currentTargetRow, 1));
currentTargetRow++;
}
}
}
摆弄范围值但没有乐趣...据我了解,它应该检查第 24、25 和 26 列中的“名称”一词,如果存在,则将该行的内容复制到新工作表中?
我有这个谷歌文档,我想将文本提取到 Excel 中,其中每一行都有每个产品的服务描述。部分段落如下:
自适应图像压缩:自适应图像压缩可检测客户端和 Akamai 边缘服务器之间的当前网络状况。它可以动态地重新压缩图像文件,减小文件大小并有助于更快地传输图像文件。
自适应媒体传输:自适应媒体传输针对自适应比特率流进行了优化。这可以在不同的网络类型和速度(包括移动网络)上提供高质量的观看体验。自适应媒体交付可提供直播和点播流媒体;而且,由于它基于 Akamai 构建,因此可提供可扩展性、可靠性、可用性和覆盖范围。
适用于设备的自适应媒体播放器 - Android SDK:适用于设备的自适应媒体播放器 (Android SDK) 是一个软件 SDK。它支持流行的基于 Android 的移动和电视平台格式的音频和视频播放。该软件以可执行格式交付,无需源代码,并且由开发人员使用可用的配置对象、参数和客户端 API 来执行配置。使用播放器不需要 Akamai 交付服务。
适用于设备的自适应媒体播放器 – Premier:适用于设备的自适应媒体播放器 (Premiere) 是一个软件 SDK。它支持流行的移动和电视平台格式的音频和视频播放。Premier 包括用于货币化和衡量的关键业务第三方功能。该软件以可执行格式交付,无需源代码,并且由开发人员使用可用的配置对象、参数和客户端 API 来执行配置。使用播放器不需要 Akamai 交付服务。
有超过 200 个这样的段落,我如何轻松地将每个段落提取到 Excel 或 google 工作表中的一行中。
请帮忙
我正在尝试使用其文件 ID 将 Google 云端硬盘上的图像插入到 Google 幻灯片中。
但是,我发现对于某些图像,使用 或insertImage
会replaceWithImage
生成 [异常:您尝试使用的图像无效或损坏。] 错误。以下是该问题的一个小重现。
function myfunction() {
var deck = SlidesApp.openById("...");
var slides = deck.getSlides();
var template = slides[0];
var currentSlide = template.duplicate();
var imgId = "...";
var logo = DriveApp.getFileById(imgId);
try {
currentSlide.insertImage(logo);
} catch (err) {
console.log("An error occurred: ", err);
}
}
我找不到这些特定图像有什么问题。它们的大小小于 50MB,低于 25 兆像素,格式为 png 或 jpeg。不幸的是,我无法附加相关图像,因为它们是私人照片,而且我还没有找到具有相同问题的免费图像。但如果有人给我任何关于尝试什么的建议,我将不胜感激。
我尝试使用DriveApp.getFileById(imgId).getBlob();
而不是 DriveApp.getFileById(imgId)
. 但一切都没有改变。
我从百科全书中下载了苹果的照片,最初是.webp格式。然后我尝试了两件事:
我正在使用 Apps 脚本运行多个查找和替换功能,但这样做似乎效率不高:
第一个函数如下所示:
function findAndReplace1() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('YouTube');
var range = sheet.getRange('A2:D');
var textFinder = sheet.createTextFinder(''');
textFinder.replaceAllWith("");
}
第二个函数如下所示:
function findAndReplace2() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('YouTube');
var range = sheet.getRange('A2:D');
var textFinder = sheet.createTextFinder('|');
textFinder.replaceAllWith(" ");
}
等等。
它工作正常,但我只想有一个函数来执行多个查找和替换“函数”。
我将如何实现这一目标?