从编辑器运行脚本功能无法正常工作

时间:2018-08-16 12:27:53

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

因此,我从未编程过JavaScript,也从未使用Google Script进行过任何操作。我对Visual Basic和Excel和Word中的宏有很好的理解。尝试制作一个相当基本的程序:浏览电子表格中的变量列表,为每个值创建一个新工作表,然后在该新工作表的单元格(1,1)中插入一个公式。

Debug接受我的程序,没有问题-但是,当我运行该程序时,什么也没有发生:

function kraft() {
  var rightHere = 
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1:A131");
  var loopy;
 var goshDarn = "";
  for (loopy = 1; loopy < 132; loopy++) {
    celly = rightHere.getCell(loopy,1);
     vaerdi = celly.getValue();
     fed = celly.getTextStyle();
     console.log(vaerdi & " - " & fed);
     if (vaerdi != "" && fed.isBold == false) {
       SpreadsheetApp.getActiveSpreadsheet().insertSheet(vaerdi);
       var thisOne = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(vaerdi);
       thisOne.deleteRows(500,500);
       thisOne.deleteColumns(5, 23);
       thisOne.getRange(1,1).setFormula("=ArrayFormula(FILTER('Individuelle varer'!A16:D30015,'Individuelle varer'!A16:A30015=" & Char(34) & vaerdi & Char(34) & ")))");
    }    
  }
}
我猜想,

activeSheet可以按名称调用,activeSpreadsheet也可以按名称调用。但是范围A1:A131有很多变量-有时会有空行和新标题(新标题为粗体)。但基本上,我希望在电子表格中显示大约120个新工作表,名称如下所示。但是什么也没发生。我试图添加一个日志,但是我无法在任何地方读取这些值。

我认为,我必须最缺少有关如何将脚本连接到电子表格的最基本的知识。

编辑:我试图根据这里和其他地方的提示更新代码,它仍然没有任何效果,但是现在看起来像这样:

function kraft() {
  var rightHere = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1:A131");
  var loopy;
  var goshDarn = "";
  for (loopy = 1; loopy < 132; loopy++) {
    celly = rightHere.getCell(loopy,1);
    vaerdi = celly.getValue();
    fed = celly.getFontWeight();
    console.log(vaerdi & " - " & fed);
    if (vaerdi != "" && fed.isBold == false) {
      SpreadsheetApp.getActiveSpreadsheet().insertSheet(vaerdi);
      var thisOne = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(vaerdi);
      thisOne.deleteRows(500,500);
      thisOne.deleteColumns(5, 23);
      thisOne.getRange(1,1).setFormula("=ArrayFormula(FILTER('Individuelle varer'!A16:D30015,'Individuelle varer'!A16:A30015=" + "\"" + vaerdi + "\"" + ")))");
    }
  }
}

EDIT2:正是由于我需要的建议,现在可以使用以下代码解决问题:

function kraft() {
  var rightHere =         SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1:A131");
  var loopy;
  for (loopy = 1; loopy < 132; loopy++) {
    celly = rightHere.getCell(loopy,1);
    vaerdi = celly.getValue();
    fed = celly.getFontWeight()
    console.log(vaerdi & " - " & fed);
    if (vaerdi != "" && fed != "bold") {
      SpreadsheetApp.getActiveSpreadsheet().insertSheet(vaerdi);
      var thisOne = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(vaerdi);
      thisOne.deleteRows(500,499);
      thisOne.deleteColumns(5, 20);
      thisOne.getRange(1,1).setFormula("=ArrayFormula(FILTER('Individuelle varer'!A16:D30015;'Individuelle varer'!A16:A30015=" + "\"" + vaerdi + "\"" + "))");
    }   
  }
}

1 个答案:

答案 0 :(得分:0)

您的脚本有多个问题,但主要的问题是您从未在'if'语句中实际调用过isBold()函数。

if (value && format.isBold() == false) {
     //do something
    } 

由于省略了'fed.isBold'中的括号,因此该表达式永远不会求值为'true'。 “ isBold”(不带括号)是对象类型,因为它是一个函数。

还有其他导致脚本无法正常运行的问题:

  1. 不使用'var'关键字来声明变量并污染全局范围。因此,您在'for'循环中声明的所有变量都不是函数的私有变量。而是将它们附加到全局对象,并且可以在函数外部进行访问。 https://prntscr.com/kjd8s5

    1. 不使用内置调试器。运行该功能无法调试。您应该设置断点并单击调试按钮以逐步执行功能,并在执行时检查所有值。

    2. 删除不存在的列。创建新工作表时,请调用 deleteColums()。共有26列。第一个参数是起始列,第二个参数指定必须删除的列数。从第5列开始,告诉脚本删除23列将引发异常。始终参考文档以避免此类错误。

    3. console.log 在脚本编辑器的上下文中不存在。您没有在浏览器中执行脚本,因此浏览器对象模型不可用。使用Logger.log()。同样,这在文档中有详细说明。

    4. 您的公式格式不正确。

JS是一种动态类型的语言,不容易习惯。如果您在编写代码之前至少没有做过一些研究,那么您会很痛苦。