Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在google sheet中运行脚本后,有没有办法自动显示单元格数据验证下拉列表中的下一个(下一个项目)?

在google sheet中运行脚本后,有没有办法自动显示单元格数据验证下拉列表中的下一个(下一个项目)?
EN

Stack Overflow用户
提问于 2021-09-09 20:21:17
回答 1查看 47关注 0票数 2

我目前是谷歌工作表脚本的新手。我正在使用脚本在google sheet中做一个简单的报告生成器。我已经有一个脚本,可以将生成的pdf文件保存到google驱动器。在我的google工作表中,有一个引用到主数据源的单元格,它带有下拉数据验证,选择人员的电子邮件,并将生成其他详细信息(它也是基于同一工作表中的该电子邮件的引用)。我想要的是,当我运行脚本来保存pdf文件,它应该自动生成pdf文件的下拉验证列表中的每个项目。这个是可能的吗?任何知道这一点的人请。

这是我的代码,生成pdf文件到驱动器(我也是从网上得到的,并做了一些修改)…非常感谢你提前这么做。

代码语言:javascript
运行
AI代码解释
复制
var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet2 = ss.getSheetByName('ID');
  var gdid1 = sheet2.getRange('B1').getValue();
  var gdid2 = sheet2.getRange('B4').getValue();

function onOpen() {
  var ui = SpreadsheetApp.getUi()
    ui.createMenu('ExportGDrive')
    .addItem('Export BasicED', 'exportBasicED')
    .addItem('Export College', 'exportCollege')
    .addToUi()
}


function _exportBasic(blob, fileName, spreadsheet) {
  blob = blob.setName(fileName)
  var folder = DriveApp.getFolderById(gdid1)
  var pdfFile = folder.createFile(blob)
  
  // Display a modal dialog box with custom HtmlService content.
  const htmlOutput = HtmlService
    .createHtmlOutput('<p>Click to open <a href="' + pdfFile.getUrl() + '" target="_blank">' + fileName + '</a></p>')
    .setWidth(300)
    .setHeight(80)
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Export Successful')
}

function _exportCollege(blob, fileName, spreadsheet) {
  blob = blob.setName(fileName)
  var folder = DriveApp.getFolderById(gdid2)
  var pdfFile = folder.createFile(blob)
  
  // Display a modal dialog box with custom HtmlService content.
  const htmlOutput = HtmlService
    .createHtmlOutput('<p>Click to open <a href="' + pdfFile.getUrl() + '" target="_blank">' + fileName + '</a></p>')
    .setWidth(300)
    .setHeight(80)
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Export Successful')
}



function exportAsPDF() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  var blob = _getAsBlob(spreadsheet.getUrl())
  _exportBlob(blob, spreadsheet.getName(), spreadsheet)
}

function _getAsBlob(url, sheet, range) {
  var rangeParam = ''
  var sheetParam = ''
  if (range) {
    rangeParam =
      '&r1=' + (range.getRow() - 1)
      + '&r2=' + range.getLastRow()
      + '&c1=' + (range.getColumn() - 1)
      + '&c2=' + range.getLastColumn()
  }
  if (sheet) {
    sheetParam = '&gid=' + sheet.getSheetId()
  }
  // A credit to https://gist.github.com/Spencer-Easton/78f9867a691e549c9c70
  // these parameters are reverse-engineered (not officially documented by Google)
  // they may break overtime.
  var exportUrl = url.replace(/\/edit.*$/, '')
      + '/export?exportFormat=pdf&format=pdf'
      + '&size=LETTER'
      + '&portrait=true'
      + '&fitw=true'       
      + '&top_margin=0.75'              
      + '&bottom_margin=0.75'          
      + '&left_margin=0.7'             
      + '&right_margin=0.7'           
      + '&sheetnames=false&printtitle=false'
      + '&pagenum=UNDEFINED' // change it to CENTER to print page numbers
      + '&gridlines=FALSE'
      + '&fzr=FALSE'      
      + sheetParam
      + rangeParam
      
  Logger.log('exportUrl=' + exportUrl)
  var response
  var i = 0
  for (; i < 5; i += 1) {
    response = UrlFetchApp.fetch(exportUrl, {
      muteHttpExceptions: true,
      headers: { 
        Authorization: 'Bearer ' +  ScriptApp.getOAuthToken(),
      },
    })
    if (response.getResponseCode() === 429) {
      // printing too fast, retrying
      Utilities.sleep(3000)
    } else {
      break
    }
  }
  
  if (i === 5) {
    throw new Error('Printing failed. Too many sheets to print.')
  }
  
  return response.getBlob()
}


function exportCurrentSheetAsPDF() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  var currentSheet = SpreadsheetApp.getActiveSheet()
  
  // Change the Cell for the name of the file (example: B3 for current sheet)
  var blob = _getAsBlob(spreadsheet.getUrl(), currentSheet)
  _exportBlob(blob, SpreadsheetApp.getActiveSheet().getRange('B3').getValue(), spreadsheet)
}



function exportBasicED() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = spreadsheet.getSheetByName('Generate-Basic Ed');
  var name = sheet1.getRange('B3').getValue();
  // Change the Cell for the name of the file (example: B3 for current sheet)
  var blob = _getAsBlob(spreadsheet.getUrl(), sheet1)
  _exportBasic(blob, name, spreadsheet)
}

function exportCollege() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = spreadsheet.getSheetByName('Generate-College');
  var name = sheet1.getRange('B3').getValue();
  // Change the Cell for the name of the file (example: B3 for current sheet)
  var blob = _getAsBlob(spreadsheet.getUrl(), sheet1)
  _exportCollege(blob, name, spreadsheet)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-09 22:42:10

试一试

代码语言:javascript
运行
AI代码解释
复制
function nextItem() {
  var sh = SpreadsheetApp.getActive();
  var data = sh.getRange('myValidationList').getValues();
  for (var i = 0; i < data.length; i++) {
    sh.getRange('A2').setValue(data[i][0]);
    SpreadsheetApp.flush(); 
    // here you can call the script to send pdf
    Utilities.sleep(1000);
  }
};

假设myValidationList是有效数据的列表,avd A2验证所在的单元格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69127231

复制
相关文章
如何查找一个域名的子域名记录
起因是在Cloudflare和DNSPod添加域名时系统会扫描待添加域名的子域解析记录,感觉很神奇。
kr
2022/07/23
8.4K0
sql查找最晚一天,日期最大的一条记录 两种方法
例:查找最晚入职员工的所有信息 CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`));
用户7741497
2022/03/08
5.2K0
Pandas案例精进 | 无数据记录的日期如何填充?
因业务需要,每周需要统计每天提交资源数量,但提交时间不定,可能会有某一天或者某几天没有提,那么如何将没有数据的日期也填充进去呢?
朱小五
2021/10/18
2.6K0
Pandas案例精进 | 无数据记录的日期如何填充?
mysql查找最后一条记录_mysql查询记录总数
首先要确定什么是最后一条。 是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。 比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。 SQL如下:
全栈程序员站长
2022/10/04
6.9K0
记录修改Typecho日期格式的问题
我们在制作Typecho主题的时候,默认官方提供的日期格式是类似July 8, 2020,这样子的,我们可能需要其他的格式,比如2020-08-08。所以我们只需要找到对应模板中的日期格式就可以。这里简单记录一下,如果以后有需要的话可以使用到。
老蒋
2021/12/24
2K0
nginx根据日期记录日志
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
93年的老男孩
2019/12/18
1.6K0
记录查找分享观影记录软件TrackTV
你是否有过这样的烦恼,不久前刚看过一个有趣的电影,但是一下子就想不起来,需要花费好长时间的搜索和思考才能记起来。
程序那些事儿
2023/03/07
8020
记录查找分享观影记录软件TrackTV
MongoDB-查找表里面重复的记录
项目中使用的是mongodb数据库,在测试数据入库的时候,会根据源数据,然后生成一个自增的id到数据库里面,然后线上和测试环境针对同一条数据的id是不一致的。某些数据又只有id与线上匹配上的时候,才能关联上更多的数据,因此,我会去写一个脚本将同一条数据,将测试环境的id改成和线上的一致。但可能由于脚本写的还不够完善,导致数据库里面可能会写入一些重复id的记录进去,然后id又没有加唯一索引。有重复的数据又会导致正常执行etl任务会报错,因此,需要查询出在mongodb里面某个字段重复的记录。
小博测试成长之路
2023/02/24
2.3K0
MongoDB-查找表里面重复的记录
查找一 线性表的查找
静默虚空
2018/01/05
1K0
查找一 线性表的查找
一日一技:如何提取网页中的日期?
最近我发现Python的一个第三方库,叫做htmldate,经过测试,它提取新闻的发布时间比较准确。我们来看看这个库怎么使用。首先使用pip安装:
青南
2022/04/07
1.6K0
一日一技:如何提取网页中的日期?
在MySQL中查找重复记录
I want to pull out duplicate records in a MySQL Database. 我想在MySQL数据库中提取重复记录。 This can be done with: 这可以通过以下方式完成:
kirin
2021/04/30
3.9K0
mysql 记录根据日期字段倒序输出
select * from water where phoneNumber=@phoneNumber order by cast(date as datetime) desc
kirin
2021/01/29
3.1K0
Nginx access log 按日期保存记录
$time_iso8601    生成格式:2021-09-18T15:16:35+08:00 $time_local          生成格式: 18/Sep/2021:15:12:13 +0800
用户1349575
2022/03/18
4.3K0
golang如何计算两个日期之间的日期差?
golang如何计算两个日期之间的日期差? 日期格式:“2017-09-01” ,“2018-03-11”
双面人
2022/09/28
7.5K0
如何用Python获取两个日期之间的日期?
问:如何用Python获取两个日期之间的日期? def date_range(start, end): delta = end - start # as timedelta days = [start + timedelta(days=i) for i in range(delta.days + 1)] return days start_date = datetime(2020, 12, 1) end_date = datetime(2020, 12, 5) print(d
TalkPython
2020/12/11
5.9K0
如何在Selenium WebDriver中查找元素?(一)
有多种方法可以唯一地标识网页中的一个Web元素,例如ID,名称,类名,链接文本,部分链接文本,标记名和XPATH。
用户7466307
2020/06/24
6.2K0
idea如何查找替换_pycharm查找替换
在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢? Pycharm/Idea里面给我们准备了替换功能
全栈程序员站长
2022/09/27
2.7K0
idea如何查找替换_pycharm查找替换
EXCEL中日期对应的数值如何转换为ABAP中的日期
默认情况下,Excel把1900-1-1 0:00:00存储为1,把1900-1-1 0:00:00以后的每一个时刻存储为该时刻与1900-1-1 0:00:00这个时刻的差值(以天为单位)。
matinal
2023/10/13
2930
OJ刷题记录:散列查找实验
题目描述: 请设计一个整型闭散列表,散列函数为除留余数法,处理冲突时的探查方法为线性探查法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,如果找到了输出位置,如果没找到,输出“none”并把该待查值插入到散列表中,如果散列表满输出“full”。
英雄爱吃土豆片
2020/11/12
5820
点击加载更多

相似问题

SERVER基于一年内最早日期的获取记录

11

Excel如何返回一年内的日期

10

如何从两年内获得记录

13

从当前日期起的最后一年内修改记录。

21

如何根据记录的日期时间查找记录

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档