Onedit脚本不会被解雇

时间:2017-12-16 22:34:44

标签: google-apps-script google-sheets triggers

所以当谈到脚本时,我是个新手。在过去,我能够得到一个小脚本,但这是一个孤立的事件,无论如何它主要是复制/粘贴。我在Google工作表中工作。这就是我想要完成的事情:

我希望我的工作表根据单个单元格C3的内容隐藏/显示某些列。我能够找到一个基于this post的脚本,但无论我做什么,脚本都不会影响我的工作表的任何更改。下面是我修改过的脚本版本。主要区别在于Omar只想要3个单独的视图,而我想要13个,每个日历月一个,一个显示全部。为了空间,我将包含3个案例。

function onEdit(e) {

var sheet = e.source.getActiveSheet();
if (e.range.getA1Notation() !== 'C3' || sheet.getName() !== 'Overview') return;
switch (e.value) {
case 'All':
    sheet.showColumns(1, sheet.getMaxColumns()-1)
    break;
case 'January':
    sheet.showColumns(1, 2, 3, 4, 5, 26, 27)
    sheet.hideColumns(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24)
    break;
case 'February':
    sheet.showColumns(1, 2, 3, 4, 5, 6, 7)
    sheet.hideColumns(8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27)
    break;
}
}

我觉得脚本应该正常工作,也许我错过了一些小的实现步骤。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

简短回答

onEdit(e)似乎没有运行,但发生的事情是它有错误。

解释

代码对showColumns和hideColumns使用不支持的语法,因此其执行被中断。

showColumns的语法是showColumns(columnIndex)showColumns(columnIndex, numColumns)。 hideColumns的语法类似。有关详细信息和示例,请参阅https://developers.google.com/apps-script/reference/spreadsheet/sheet

How can I test a trigger function in GAS?上,它解释了如何调试触发器功能。

Cooper在his answer上提到他发布了一个代码,该代码对你想要实现的目标做了类似的事情,并警告了简单触发器的限制。请注意,隐藏/显示行/列的速度很慢,而简单触发器的执行时间限制为30秒。克服此限制的方法是使用可安装的触发器,但也许您的情况很简单,无需使用辅助功能和可安装的触发器即可解决。

以下是您对1月份案例所做的更改。

case 'January':
    sheet.showColumns(1, 5);  // show columns from column A to column E
    sheet.showColumns(26, 2); // show columns from column Z to column AA
    sheet.hideColumns(6, 19);  // hide columns from column F to column X
    break;

我让你自己弄明白二月的情况。

答案 1 :(得分:0)

我最近做了类似的事情你可以看一下here。隐藏很多列也需要时间,因此请注意这些restrictions

library(ggplot2)
set.seed(42)

PERCENT   <- rnorm(50, sd = 3)
WAVE      <- sample(6, 50, replace = TRUE)
AGE_GROUP <- rep(c("21-30", "31-40", "41-50", "51-60", "61-70"), 10)
COUNTRY   <- rep(c("Country A", "Country B"), 25)
N         <- rnorm(50, mean = 200, sd = 2)

df <- data.frame(PERCENT, WAVE, AGE_GROUP, COUNTRY, N)

ggplot(df) +
  aes(x = factor(WAVE),
      y = PERCENT,
      fill = factor(COUNTRY)) +
  geom_boxplot(alpha = 0.3) +
  geom_point(aes(color = AGE_GROUP, group = factor(COUNTRY)), position = position_dodge(width=0.75)) + 

  geom_text(aes(group = interaction(WAVE, COUNTRY),
                label = ifelse(test = PERCENT > median(PERCENT) + 1.5*IQR(PERCENT)|PERCENT < median(PERCENT) -1.5*IQR(PERCENT),
                               yes  = paste(AGE_GROUP, ",", round(PERCENT, 1), "%, n =", round(N, 0)),
                               no   = '')),
            position = position_dodge(width = 0.75),
            hjust = -.2,
            size = 3)