因此,我从未编程过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 + "\"" + "))");
}
}
}
答案 0 :(得分:0)
您的脚本有多个问题,但主要的问题是您从未在'if'语句中实际调用过isBold()函数。
if (value && format.isBold() == false) {
//do something
}
由于省略了'fed.isBold'中的括号,因此该表达式永远不会求值为'true'。 “ isBold”(不带括号)是对象类型,因为它是一个函数。
还有其他导致脚本无法正常运行的问题:
不使用'var'关键字来声明变量并污染全局范围。因此,您在'for'循环中声明的所有变量都不是函数的私有变量。而是将它们附加到全局对象,并且可以在函数外部进行访问。 https://prntscr.com/kjd8s5
不使用内置调试器。运行该功能无法调试。您应该设置断点并单击调试按钮以逐步执行功能,并在执行时检查所有值。
删除不存在的列。创建新工作表时,请调用 deleteColums()。共有26列。第一个参数是起始列,第二个参数指定必须删除的列数。从第5列开始,告诉脚本删除23列将引发异常。始终参考文档以避免此类错误。
console.log 在脚本编辑器的上下文中不存在。您没有在浏览器中执行脚本,因此浏览器对象模型不可用。使用Logger.log()。同样,这在文档中有详细说明。
您的公式格式不正确。
JS是一种动态类型的语言,不容易习惯。如果您在编写代码之前至少没有做过一些研究,那么您会很痛苦。