当我在另一个 sheet 上活动时隐藏一个 sheet
Hide a sheet when I am active on another sheet
我试图在我不使用时自动隐藏一个名为“添加费用”的 sheet。
例如
我有 sheet“BD 费用”、sheet“BD 代币”、sheet“BD 收入”、sheet“添加费用” , sheet“添加收入”。
我想要的是,当我在任何不称为“输入费用”的 sheet 中处于活动状态时,脚本会完全自动运行(无需单击任何按钮)以隐藏sheet 称为“添加费用”。
我目前有这个代码:
//Ocultar todas las hojas excepto la activa
function Ocultar_formulario_ANADIR_GASTO() {
var sheets = SpreadsheetApp.getActiveSheet();
sheets.forEach(function(sheet) {
if (sheet.getSheetByName('Añadir gasto') != SpreadsheetApp.getActiveSheet().getName())
sheet.hideSheet();
});
};
我试过各种方法都没有成功。
我知道有一个名为 onSelectionChange (e) 的函数,但由于我对 Javascript 还很陌生,所以我真的不知道如何让它工作。因此我以不同的方式创建了我的代码。
我查看了来自 https://developers.google.com/apps-script/reference/spreadsheet/sheet#hidesheet
的参考资料
我也搜索过 google 和 Whosebug,但找不到解决这个问题的方法。
当前,当 运行 来自编辑器的脚本时,我收到错误“TypeError:sheets.forEach 不是一个函数”。
我无法让它工作。
如果有人能看看我的代码并提供一点帮助,我将不胜感激。
非常感谢。
当您更改 sheets 时,似乎有 no specific Google Scripts event。
但是 issue tracker ticket 中提到了一个变通方法 - 滚动到工单底部可以看到它。它涉及使用 onSelectionChange(e)
来跟踪您搬出和搬入的 sheet。
以下代码根据您的情况调整解决方法:
该代码假定您的 Google 传播 sheet 有 2 个或更多 sheet - 其中一个 sheet 称为 Secret Sheet
。您可以将此名称更改为您想要的任何名称(请参阅代码的第一行)。
当您从 Secret Sheet
移动到任何其他 sheet 时,Secret Sheet
将自动隐藏。
var secretSheetName = 'Secret Sheet'; // change this to whatever you prefer.
var prevSheetProperty = 'PREVIOUS_SHEET';
function saveActiveSheet() {
var activesheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty(prevSheetProperty, activesheet.getSheetName());
}
function onSheetChange(e) {
var sheetToHide = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(secretSheetName);
sheetToHide.hideSheet();
}
function onSelectionChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get current sheet name and compare to previously saved sheet
var currentSheetName = ss.getActiveSheet().getSheetName();
var userProperties = PropertiesService.getUserProperties();
var previousSheetName = userProperties.getProperty(prevSheetProperty);
if (currentSheetName !== previousSheetName) {
saveActiveSheet(); // this becomes the new "previous sheet".
if (previousSheetName === secretSheetName) {
// you have moved out of the secret sheet - so, hide it:
onSheetChange(e); // Call custom sheet change trigger
}
}
}
function onOpen(e) {
saveActiveSheet();
}
脚本的工作原理是跟踪哪个 sheet 是当前活动的 sheet - 哪个是(不同的)之前活动的 sheet。
它在用户 属性 中存储“以前的”sheet 名称。
您将看到要使用 onSelectionChange(e)
事件,您只需将该函数添加到脚本中即可:
function onSelectionChange(e) { ... }
Google 脚本自动将此识别为事件函数。您可以通过示例阅读更多相关信息 here.
我将回答我自己的问题,以提供与@andrewjames 相同的解决方案,但同时隐藏多个 sheet。
可以在@andrewjames 评论中找到隐藏单个 sheet 的代码。
以@adrewjames 的代码为基础隐藏多个sheet的代码是这样的。
var addFicha = 'Añadir ficha'; // change this to whatever you prefer.
var addGasto = 'Añadir gasto'; // change this to whatever you prefer.
var addIngreso = 'Añadir ingreso'; // change this to whatever you prefer.
var hideMultipleSheets = addFicha || addGasto || addIngreso;
var prevSheetProperty = 'PREVIOUS_SHEET';
function saveActiveSheet() {
var activesheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty(prevSheetProperty, activesheet.getSheetName());
}
function onSheetChange(e) {
var sheetToHide1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(addFicha);
var sheetToHide2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(addGasto);
var sheetToHide3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(addIngreso);
sheetToHide1.hideSheet();
sheetToHide2.hideSheet();
sheetToHide3.hideSheet();
}
function onSelectionChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get current sheet name and compare to previously saved sheet
var currentSheetName = ss.getActiveSheet().getSheetName();
var userProperties = PropertiesService.getUserProperties();
var previousSheetName = userProperties.getProperty(prevSheetProperty);
if (currentSheetName !== previousSheetName) {
saveActiveSheet(); // this becomes the new "previous sheet".
if (previousSheetName === hideMultipleSheets) {
// you have moved out of the secret sheet - so, hide it:
onSheetChange(e); // Call custom sheet change trigger
}
}
}
function onOpen(e) {
saveActiveSheet();
}
在这里我留下一个简短的解释,以便如果有人需要此代码,他们知道如何修改它以使其满足他们的需要。
1. 在所有代码的开头,我们看到前 3 个变量。
在这种情况下,我们要隐藏 3 个 sheet,这就是为什么只有 3 个变量。如果你想隐藏 5 sheets,你应该有 5 个变量。
在这里你可以随意命名它们。那么,引号内的文字就是你要隐藏的sheet的名字,所以你必须把它改成你的sheet的名字。
示例:
var hideSheettt1 = 'Here you need to copy the name of your sheet';
2. 在前 3 个变量之后,我们有 4 个变量 hideMultipleSheets
在这种情况下,我们将前 3 个变量合并为一个变量,以便稍后在 onSelectionChange (e) 函数中重用它
在这里,您必须将 addFicha
addGasto
addIngreso
替换为您为第一个变量指定的名称。
继续第 1 点的示例,我们将使用 var hideSheettt1 = 'Here you need to copy the name of your sheet';
作为参考。
示例:
var hideMultipleSheets = hideSheettt1 || hideSheettt2|| hideSheettt3;
3. 在 SheetChange (e) 函数中,您必须将前 3 个变量中的 .getSheetByName () 变量替换为您在整个代码的开头(第 1 点)。
示例:
var sheetToHide1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(hideSheettt1);
此时,您应该包含与要隐藏的 sheet 和您在代码开头创建的变量一样多的变量。在这种情况下,我们要隐藏 3 sheets。但是如果我们想隐藏 5 sheets,我们必须有 5 个变量,每个 sheet.
我们也必须有相同数量的 hideSheet()
我试图在我不使用时自动隐藏一个名为“添加费用”的 sheet。
例如
我有 sheet“BD 费用”、sheet“BD 代币”、sheet“BD 收入”、sheet“添加费用” , sheet“添加收入”。
我想要的是,当我在任何不称为“输入费用”的 sheet 中处于活动状态时,脚本会完全自动运行(无需单击任何按钮)以隐藏sheet 称为“添加费用”。
我目前有这个代码:
//Ocultar todas las hojas excepto la activa
function Ocultar_formulario_ANADIR_GASTO() {
var sheets = SpreadsheetApp.getActiveSheet();
sheets.forEach(function(sheet) {
if (sheet.getSheetByName('Añadir gasto') != SpreadsheetApp.getActiveSheet().getName())
sheet.hideSheet();
});
};
我试过各种方法都没有成功。
我知道有一个名为 onSelectionChange (e) 的函数,但由于我对 Javascript 还很陌生,所以我真的不知道如何让它工作。因此我以不同的方式创建了我的代码。
我查看了来自 https://developers.google.com/apps-script/reference/spreadsheet/sheet#hidesheet
的参考资料我也搜索过 google 和 Whosebug,但找不到解决这个问题的方法。
当前,当 运行 来自编辑器的脚本时,我收到错误“TypeError:sheets.forEach 不是一个函数”。
我无法让它工作。
如果有人能看看我的代码并提供一点帮助,我将不胜感激。
非常感谢。
当您更改 sheets 时,似乎有 no specific Google Scripts event。
但是 issue tracker ticket 中提到了一个变通方法 - 滚动到工单底部可以看到它。它涉及使用 onSelectionChange(e)
来跟踪您搬出和搬入的 sheet。
以下代码根据您的情况调整解决方法:
该代码假定您的 Google 传播 sheet 有 2 个或更多 sheet - 其中一个 sheet 称为 Secret Sheet
。您可以将此名称更改为您想要的任何名称(请参阅代码的第一行)。
当您从 Secret Sheet
移动到任何其他 sheet 时,Secret Sheet
将自动隐藏。
var secretSheetName = 'Secret Sheet'; // change this to whatever you prefer.
var prevSheetProperty = 'PREVIOUS_SHEET';
function saveActiveSheet() {
var activesheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty(prevSheetProperty, activesheet.getSheetName());
}
function onSheetChange(e) {
var sheetToHide = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(secretSheetName);
sheetToHide.hideSheet();
}
function onSelectionChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get current sheet name and compare to previously saved sheet
var currentSheetName = ss.getActiveSheet().getSheetName();
var userProperties = PropertiesService.getUserProperties();
var previousSheetName = userProperties.getProperty(prevSheetProperty);
if (currentSheetName !== previousSheetName) {
saveActiveSheet(); // this becomes the new "previous sheet".
if (previousSheetName === secretSheetName) {
// you have moved out of the secret sheet - so, hide it:
onSheetChange(e); // Call custom sheet change trigger
}
}
}
function onOpen(e) {
saveActiveSheet();
}
脚本的工作原理是跟踪哪个 sheet 是当前活动的 sheet - 哪个是(不同的)之前活动的 sheet。
它在用户 属性 中存储“以前的”sheet 名称。
您将看到要使用 onSelectionChange(e)
事件,您只需将该函数添加到脚本中即可:
function onSelectionChange(e) { ... }
Google 脚本自动将此识别为事件函数。您可以通过示例阅读更多相关信息 here.
我将回答我自己的问题,以提供与@andrewjames 相同的解决方案,但同时隐藏多个 sheet。
可以在@andrewjames 评论中找到隐藏单个 sheet 的代码。
以@adrewjames 的代码为基础隐藏多个sheet的代码是这样的。
var addFicha = 'Añadir ficha'; // change this to whatever you prefer.
var addGasto = 'Añadir gasto'; // change this to whatever you prefer.
var addIngreso = 'Añadir ingreso'; // change this to whatever you prefer.
var hideMultipleSheets = addFicha || addGasto || addIngreso;
var prevSheetProperty = 'PREVIOUS_SHEET';
function saveActiveSheet() {
var activesheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty(prevSheetProperty, activesheet.getSheetName());
}
function onSheetChange(e) {
var sheetToHide1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(addFicha);
var sheetToHide2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(addGasto);
var sheetToHide3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(addIngreso);
sheetToHide1.hideSheet();
sheetToHide2.hideSheet();
sheetToHide3.hideSheet();
}
function onSelectionChange(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get current sheet name and compare to previously saved sheet
var currentSheetName = ss.getActiveSheet().getSheetName();
var userProperties = PropertiesService.getUserProperties();
var previousSheetName = userProperties.getProperty(prevSheetProperty);
if (currentSheetName !== previousSheetName) {
saveActiveSheet(); // this becomes the new "previous sheet".
if (previousSheetName === hideMultipleSheets) {
// you have moved out of the secret sheet - so, hide it:
onSheetChange(e); // Call custom sheet change trigger
}
}
}
function onOpen(e) {
saveActiveSheet();
}
在这里我留下一个简短的解释,以便如果有人需要此代码,他们知道如何修改它以使其满足他们的需要。
1. 在所有代码的开头,我们看到前 3 个变量。
在这种情况下,我们要隐藏 3 个 sheet,这就是为什么只有 3 个变量。如果你想隐藏 5 sheets,你应该有 5 个变量。
在这里你可以随意命名它们。那么,引号内的文字就是你要隐藏的sheet的名字,所以你必须把它改成你的sheet的名字。
示例:
var hideSheettt1 = 'Here you need to copy the name of your sheet';
2. 在前 3 个变量之后,我们有 4 个变量 hideMultipleSheets
在这种情况下,我们将前 3 个变量合并为一个变量,以便稍后在 onSelectionChange (e) 函数中重用它
在这里,您必须将 addFicha
addGasto
addIngreso
替换为您为第一个变量指定的名称。
继续第 1 点的示例,我们将使用 var hideSheettt1 = 'Here you need to copy the name of your sheet';
作为参考。
示例:
var hideMultipleSheets = hideSheettt1 || hideSheettt2|| hideSheettt3;
3. 在 SheetChange (e) 函数中,您必须将前 3 个变量中的 .getSheetByName () 变量替换为您在整个代码的开头(第 1 点)。
示例:
var sheetToHide1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(hideSheettt1);
此时,您应该包含与要隐藏的 sheet 和您在代码开头创建的变量一样多的变量。在这种情况下,我们要隐藏 3 sheets。但是如果我们想隐藏 5 sheets,我们必须有 5 个变量,每个 sheet.
我们也必须有相同数量的 hideSheet()