从 google 个工作表中删除过滤的视图和超链接
Delete filtered Views and hyperlinks from google sheets
这是
的扩展
我有 sheet 个 sheet 个名字(sheet A、B 和 C 列中的 1 个)。我想要 Sheet 2 , sheet 3 和 Sheet 4 中的人的销售信息.
如果可能,请添加一个功能来删除Sheet1 中A、B 和C 列的过滤视图和超链接。我想要删除每列中名称的筛选视图和超链接的选项。我的意思是,不是删除所有过滤视图。输入将是每列的名称,输出将删除这些名称的超链接和过滤器视图(这样我就可以选择只删除列 A 和列 B 的视图和超链接,而不是删除所有)。
示例图片:
我在 sheet1 中有名字。所有列都有超链接。现在我想要一个删除过滤器功能来仅从 C 列(名称列表 1)中删除过滤器视图和超链接。
Sheet1 具有所有超链接:
Sheet1 当删除功能仅应用于名称列表 1 中的名称时:
以防万一,下面是如何从列 'C' 中删除所有链接的示例:
function remove_links_from_col_C() {
var range = SpreadsheetApp.getActiveSheet().getRange('C5:C');
var values = range.getDisplayValues();
range.clear().setValues(values);
}
如果您有彩色背景并且需要保持它们完好无损,可以这样做:
function remove_links_from_col_C() {
var range = SpreadsheetApp.getActiveSheet().getRange('C5:C');
var backgrounds = range.getBackgrounds(); // <--- save backgrounds
var values = range.getDisplayValues();
range.clear().setValues(values);
range.setBackgrounds(backgrounds); // <--- restore backgrounds
}
我相信你的目标如下。
- 通过给出范围,您想删除过滤视图并想重置“Sheet1”。
在这种情况下,下面的示例脚本怎么样?
示例脚本:
在您使用此脚本之前,please enable Sheets API at Advanced Google services。
function myFunction() {
// Please set the range you want to delete the filter views.
var obj = { src: "Sheet1", dst: ["C4:C", "G4:G"] };
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheet = ss.getSheetByName(obj.src);
var ids = obj.dst.flatMap(e => {
var range = sheet.getRange(e);
var richTextValues = range.getRichTextValues();
var fids = richTextValues.flatMap(([r], i) => {
var url = r.getLinkUrl();
return url ? [url.split("=").pop()] : [];
});
var bk = range.getBackgrounds();
range.clearFormat().setBackgrounds(bk).setRichTextValues(richTextValues.map(([r]) => [r.copy().setLinkUrl(null).build()]));
return fids.map(f => ({ deleteFilterView: { filterId: f } }));
});
if (ids.length > 0) Sheets.Spreadsheets.batchUpdate({ requests: ids }, ssId);
}
- 在此示例脚本中,
var obj = { src: "Sheet1", dst: ["C4:C", "G4:G"] }
重置了您的列“C”和“G”。
参考文献:
这是
我有 sheet 个 sheet 个名字(sheet A、B 和 C 列中的 1 个)。我想要 Sheet 2 , sheet 3 和 Sheet 4 中的人的销售信息.
如果可能,请添加一个功能来删除Sheet1 中A、B 和C 列的过滤视图和超链接。我想要删除每列中名称的筛选视图和超链接的选项。我的意思是,不是删除所有过滤视图。输入将是每列的名称,输出将删除这些名称的超链接和过滤器视图(这样我就可以选择只删除列 A 和列 B 的视图和超链接,而不是删除所有)。
示例图片:
我在 sheet1 中有名字。所有列都有超链接。现在我想要一个删除过滤器功能来仅从 C 列(名称列表 1)中删除过滤器视图和超链接。
Sheet1 具有所有超链接:
Sheet1 当删除功能仅应用于名称列表 1 中的名称时:
以防万一,下面是如何从列 'C' 中删除所有链接的示例:
function remove_links_from_col_C() {
var range = SpreadsheetApp.getActiveSheet().getRange('C5:C');
var values = range.getDisplayValues();
range.clear().setValues(values);
}
如果您有彩色背景并且需要保持它们完好无损,可以这样做:
function remove_links_from_col_C() {
var range = SpreadsheetApp.getActiveSheet().getRange('C5:C');
var backgrounds = range.getBackgrounds(); // <--- save backgrounds
var values = range.getDisplayValues();
range.clear().setValues(values);
range.setBackgrounds(backgrounds); // <--- restore backgrounds
}
我相信你的目标如下。
- 通过给出范围,您想删除过滤视图并想重置“Sheet1”。
在这种情况下,下面的示例脚本怎么样?
示例脚本:
在您使用此脚本之前,please enable Sheets API at Advanced Google services。
function myFunction() {
// Please set the range you want to delete the filter views.
var obj = { src: "Sheet1", dst: ["C4:C", "G4:G"] };
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheet = ss.getSheetByName(obj.src);
var ids = obj.dst.flatMap(e => {
var range = sheet.getRange(e);
var richTextValues = range.getRichTextValues();
var fids = richTextValues.flatMap(([r], i) => {
var url = r.getLinkUrl();
return url ? [url.split("=").pop()] : [];
});
var bk = range.getBackgrounds();
range.clearFormat().setBackgrounds(bk).setRichTextValues(richTextValues.map(([r]) => [r.copy().setLinkUrl(null).build()]));
return fids.map(f => ({ deleteFilterView: { filterId: f } }));
});
if (ids.length > 0) Sheets.Spreadsheets.batchUpdate({ requests: ids }, ssId);
}
- 在此示例脚本中,
var obj = { src: "Sheet1", dst: ["C4:C", "G4:G"] }
重置了您的列“C”和“G”。