Google apps script 基于日期范围隐藏列的Google脚本疑难解答
已更正 我有一张谷歌表格,上面有每周的数据表(一年的价值) 在工作表的顶部,我有“到”和“从”日期字段 我试图通过隐藏所有与“to”/“from”范围之外的日期相关的列来限制用户的查看 我已经研究过如何做到这一点,但显然无法正确地制作脚本 更新我现在已经纠正了这一点,但我的脚本将只隐藏 无论“收件人”/“发件人”单元格中的日期是什么,第一列都是。 脚本如下所示 多谢各位Google apps script 基于日期范围隐藏列的Google脚本疑难解答,google-apps-script,hide,Google Apps Script,Hide,已更正 我有一张谷歌表格,上面有每周的数据表(一年的价值) 在工作表的顶部,我有“到”和“从”日期字段 我试图通过隐藏所有与“to”/“from”范围之外的日期相关的列来限制用户的查看 我已经研究过如何做到这一点,但显然无法正确地制作脚本 更新我现在已经纠正了这一点,但我的脚本将只隐藏 无论“收件人”/“发件人”单元格中的日期是什么,第一列都是。 脚本如下所示 多谢各位 function onOpen() { var ss = SpreadsheetApp.getActiveSpreads
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('NEW - HOURS');
var startColumn = 5;
var values = s.getRange('E7:BD7').getValues();
var start = s.getRange('B4').getValue();
var end = s.getRange('B5').getValue();
var column, len, date, hideCount = 0, showCount = 0;
for (column = values.length - 1; column >= 0; --column) {
date = values[column][0];
if ( typeof date != 'object' || !(date >= start && date < end) ) {
if (showCount) {
s.showColumns(column + startColumn + 1, showCount);
showCount = 0;
}
hideCount++;
} else {
if (hideCount) {
s.hideColumns(column + startColumn + 1, hideCount);
hideCount = 0;
}
showCount++;
}
}
if (showCount) s.showColumns(column + startColumn + 1, showCount);
if (hideCount) s.hideColumns(column + startColumn + 1, hideCount);
}
函数onOpen(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getSheetByName('NEW-HOURS');
var startColumn=5;
var values=s.getRange('E7:BD7').getValues();
var start=s.getRange('B4').getValue();
var end=s.getRange('B5').getValue();
变量列,len,date,hideCount=0,showCount=0;
对于(列=values.length-1;列>=0;--column){
日期=数值[列][0];
如果(日期类型!=“对象”| |!(日期>=开始和日期<结束)){
如果(显示计数){
s、 showColumns(column+startColumn+1,showCount);
showCount=0;
}
hideCount++;
}否则{
如果(隐藏计数){
s、 hideColumns(列+startColumn+1,hideCount);
hideCount=0;
}
showCount++;
}
}
if(showCount)s.showColumns(column+startColumn+1,showCount);
if(hideCount)s.hideColumns(column+startColumn+1,hideCount);
}
注意行-列表示法
请注意,范围是一个二维数组,其中外部数组对应于行,嵌套数组对应于列,这可以从方法中提取
因此,值
矩阵被定义为值[row][column]
,以及值。length
将给出行数-对于列数,使用值[0]。length
总之,您需要进行更改
for (column = values.length - 1; column >= 0; --column) {
date = values[column][0];
...
到
其他更新:
您确定您的电子表格中有一张名为“提取前止赎”的表格吗?错误消息表明没有这样的工作表-
getSheetByName()
方法在查找目标工作表失败时返回null
(显然,null
没有getRange()
方法)。UPD:如果底部的电子表格是打开的,那么这肯定是我们需要的所有代码和数据来重现问题。请提供。我现在已根据您的反馈进行更新。请允许我访问您的电子表格,谢谢。起初,我收到一条错误消息,列超出了范围,我按照上面提到的修改了脚本,现在它工作得很好
for (column = values[0].length - 1; column >= 0; --column) {
date = values[0][column];
...
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('NEW - HOURS');
var startColumn = 5;
var values = s.getRange('E7:7').getValues();