for-loop - 分配给宏按钮时,for循环无法正常工作?
问题描述
由于我刚刚开始学习使用 Google Apps 脚本,因此对术语中的任何混淆表示歉意。我最近创建了一个 Google 表格电子表格报告,以帮助监控帐户并记录任何客户设备的任何问题(单击此处查看所述文件)。我在“封面”表上设置了一个“开始报告”按钮,该按钮应该触发下面列出的功能;
function startReport()
{
hideSheet();
addXColumns();
};
function hideSheet() //Hides Coversheet from user's view.
{
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A3:B5').activate();
spreadsheet.getActiveSheet().hideSheet();
};
function addXColumns() //Adds columns based on the fleet size inputted by the user.
{
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var fleetSize = sheet.getRange(3,3).getValue();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Report'), true);
spreadsheet.getRange('D:D').activate();
for (var i = 0; i < fleetSize; i++) //Performs steps through for loop until counter reaches fleetSize number based on user input.
{
spreadsheet.getActiveSheet().insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 1);
spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 1).activate();
spreadsheet.getActiveRangeList().setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID);
spreadsheet.getRange('D6').activate();
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('D6:E6'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('D:D').activate();
}
spreadsheet.getRange('E5').activate();
};
执行时,“报告”表应该根据来自“封面”的用户输入(车队大小)在 D 列之后插入新列。当 UI 中选择的活动工作表是“报告”工作表时,此脚本会正确运行。但是,每次我在“封面”中运行脚本时,脚本都会运行函数,但不会在“报告”表中填充新列。从我可以诊断的情况来看,错误似乎在此某处;
function hideSheet() //Hides Coversheet from user's view.
{
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A3:B5').activate();
spreadsheet.getActiveSheet().hideSheet();
};
function addXColumns() //Adds columns based on the fleet size inputted by the user.
{
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var fleetSize = sheet.getRange(3,3).getValue();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Report'), true);
spreadsheet.getRange('D:D').activate();
在执行 hideSheet() 和 addXColumns() 函数后,工作表似乎没有主动从“Coversheet”切换到“Report”。变量fleetSize的值是“Coversheet”中的C3,而不是“Report”中的C3(这是我正在寻找的)。
对此的任何见解将不胜感激!
解决方案
- 您想通过按下“开始报告”按钮来运行
startReport()
表格中的功能。Coversheet
- 在您共享的电子表格中,“开始报告”按钮的功能名称为
myFunction
。但是你想运行startReport()
. - 您想通过修改脚本来实现这一点。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
修改点:
- 在您的脚本中,使用了活动工作表。所以它使用
getSheetByName()
.- 这反映在
hideSheet()
和addXColumns()
上。
- 这反映在
修改后的脚本:
当您的脚本被修改时,请进行如下修改。
从:function hideSheet() //Hides Coversheet from user's view.
{
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A3:B5').activate();
spreadsheet.getActiveSheet().hideSheet();
};
到:
function hideSheet() //Hides Coversheet from user's view.
{
var sheet = SpreadsheetApp.getActive().getSheetByName("Report");
sheet.hideSheet();
};
和
从:function addXColumns() //Adds columns based on the fleet size inputted by the user.
{
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
到:
function addXColumns() //Adds columns based on the fleet size inputted by the user.
{
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName("Report");
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- javascript - Javascript变量范围有问题
- reactjs - 两种方式的数据绑定不适用于在 React 中动态加载的多个复选框
- python - 如何将 SIGINT 发送到在子进程中运行的 python
- r - R中的批量地理编码
- ionic-framework - Ionic 4:媒体捕获插件的视频上传错误
- python - 使用服务员在生产环境中运行烧瓶
- api - 邮递员调用 Autotask
- elasticsearch - Elasticsearch:检查对象类型字段中是否存在键
- acumatica - 升级后的代码出现新错误
- javascript - 如何使用 MomentJS 获取特定日期?