Google apps script 基于日期范围隐藏列的Google脚本疑难解答

Google apps script 基于日期范围隐藏列的Google脚本疑难解答,google-apps-script,hide,Google Apps Script,Hide,已更正 我有一张谷歌表格,上面有每周的数据表(一年的价值) 在工作表的顶部,我有“到”和“从”日期字段 我试图通过隐藏所有与“to”/“from”范围之外的日期相关的列来限制用户的查看 我已经研究过如何做到这一点,但显然无法正确地制作脚本 更新我现在已经纠正了这一点,但我的脚本将只隐藏 无论“收件人”/“发件人”单元格中的日期是什么,第一列都是。 脚本如下所示 多谢各位 function onOpen() { var ss = SpreadsheetApp.getActiveSpreads

已更正

我有一张谷歌表格,上面有每周的数据表(一年的价值)

在工作表的顶部,我有“到”和“从”日期字段

我试图通过隐藏所有与“to”/“from”范围之外的日期相关的列来限制用户的查看

我已经研究过如何做到这一点,但显然无法正确地制作脚本

更新我现在已经纠正了这一点,但我的脚本将只隐藏 无论“收件人”/“发件人”单元格中的日期是什么,第一列都是。 脚本如下所示

多谢各位

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();