Syntax error: SyntaxError: missing ) after argument list - Google Sheets (super weird one)
Syntax error: SyntaxError: missing ) after argument list - Google Sheets (super weird one)
我一直在尝试保存此宏,但在第 29 行收到错误消息。但是,我觉得一切正常吗?我不明白如何摆脱错误。我需要一些帮助。
代码如下:
function FVMacro() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('2:2').activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getRange('A3:B4').activate();
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('A2:B4'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('A2:B4').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('A3'));
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Fixed Data'), true);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FAIR VALUE'), true);
spreadsheet.getRange('C2').activate();
spreadsheet.getRange('\'Fixed Data\'!B1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('N3:N4').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('N4'));
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('N2:N4'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('W3:W4').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('W4'));
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('W2:W4'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('D3:H3').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('D2').activate();
spreadsheet.getCurrentCell().setValue('=iferror(arrayformula(if(B2:B="",,Ln(B2:B))))');
spreadsheet.getRange('E2').activate();
spreadsheet.getCurrentCell().setValue('=iferror(arrayformula(if(C2:C<=0,,ln(C2:C))))');
spreadsheet.getRange('F2').activate();
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(B2:B="",,'FV Charts'!B4*ln(B2:B)+'FV Charts'!C4)))');
spreadsheet.getRange('G2').activate();
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(F2:F="",,exp(F2:F))))');
spreadsheet.getRange('H2').activate();
spreadsheet.getCurrentCell().setValue('=arrayformula(if(F2:F="",,E2:E-F2:F))');
spreadsheet.getRange('H3').activate();
};
这一行导致问题:
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(B2:B="",,'FV Charts'!B4*ln(B2:B)+'FV Charts'!C4)))');
将出错的行替换为:
spreadsheet.getCurrentCell().setValue("=arrayformula(iferror(if(B2:B=\"\",,'FV Charts'!B4*ln(B2:B)+'FV Charts'!C4)))");
错误源于您对 Sheet 名称使用单引号 '
而不是 "
,这导致括号未正确闭合。但是,考虑到必须使用单引号在公式中引用 sheet 名称这一事实,我将开始的单引号替换为双引号,并使用 \
将其转义为 B2:B
范围,以便一切正常关闭。
您也可以像这样从您的行中转义单引号:
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(B2:B="",,\'FV Charts\'!B4*ln(B2:B)+\'FV Charts\'!C4)))');
参考
我一直在尝试保存此宏,但在第 29 行收到错误消息。但是,我觉得一切正常吗?我不明白如何摆脱错误。我需要一些帮助。
代码如下:
function FVMacro() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('2:2').activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getRange('A3:B4').activate();
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('A2:B4'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('A2:B4').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('A3'));
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Fixed Data'), true);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FAIR VALUE'), true);
spreadsheet.getRange('C2').activate();
spreadsheet.getRange('\'Fixed Data\'!B1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('N3:N4').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('N4'));
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('N2:N4'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('W3:W4').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('W4'));
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('W2:W4'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('D3:H3').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('D2').activate();
spreadsheet.getCurrentCell().setValue('=iferror(arrayformula(if(B2:B="",,Ln(B2:B))))');
spreadsheet.getRange('E2').activate();
spreadsheet.getCurrentCell().setValue('=iferror(arrayformula(if(C2:C<=0,,ln(C2:C))))');
spreadsheet.getRange('F2').activate();
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(B2:B="",,'FV Charts'!B4*ln(B2:B)+'FV Charts'!C4)))');
spreadsheet.getRange('G2').activate();
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(F2:F="",,exp(F2:F))))');
spreadsheet.getRange('H2').activate();
spreadsheet.getCurrentCell().setValue('=arrayformula(if(F2:F="",,E2:E-F2:F))');
spreadsheet.getRange('H3').activate();
};
这一行导致问题:
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(B2:B="",,'FV Charts'!B4*ln(B2:B)+'FV Charts'!C4)))');
将出错的行替换为:
spreadsheet.getCurrentCell().setValue("=arrayformula(iferror(if(B2:B=\"\",,'FV Charts'!B4*ln(B2:B)+'FV Charts'!C4)))");
错误源于您对 Sheet 名称使用单引号 '
而不是 "
,这导致括号未正确闭合。但是,考虑到必须使用单引号在公式中引用 sheet 名称这一事实,我将开始的单引号替换为双引号,并使用 \
将其转义为 B2:B
范围,以便一切正常关闭。
您也可以像这样从您的行中转义单引号:
spreadsheet.getCurrentCell().setValue('=arrayformula(iferror(if(B2:B="",,\'FV Charts\'!B4*ln(B2:B)+\'FV Charts\'!C4)))');
参考