这可以通过Google Sheets API v4 实现,Apps 脚本可以通过Advanced Sheets Service 访问它(请注意,它必须在使用前启用,如链接页面所示)。这是一个脚本,用于删除当前电子表格 Sheet1 中的所有条件格式规则(您需要循环遍历工作表等)。
function clearSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheet = ss.getSheetByName("Sheet1");
var sheetId = sheet.getSheetId();
var format_req = {
"requests": [{
"deleteConditionalFormatRule": {
"index": 0,
"sheetId": sheetId
}
}]
};
var string_req = JSON.stringify(format_req);
while (true) {
try {
Sheets.Spreadsheets.batchUpdate(string_req, ssId);
}
catch(e) {
break;
}
}
}
每个条件格式规则都有一个从 0 开始的“索引”。删除索引为 0 的规则会导致其他索引减少 1。因此循环继续删除 index = 0 规则,直到没有规则,并引发错误(并被捕获,退出循环)。
这是一种奇怪的发送请求方式:我更愿意像这样发送一个批处理请求:
var format_req = {
"requests": [
{
"deleteConditionalFormatRule": {
"index": 0,
"sheetId": sheetId
}
},
{
"deleteConditionalFormatRule": {
"index": 1,
"sheetId": sheetId
}
}]
};
但要做到这一点,必须知道有多少条件格式规则(我不知道如何找到)。如果您要求删除的规则多于工作表中的规则,则整个请求将失败并且不会删除任何内容。
没有高级服务
使用普通的 Apps 脚本,最好的方法是:
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
var backgrounds = range.getBackgrounds();
var fontColors = range.getFontColor();
var fontFamilies = range.getFontFamilies();
// ... other get methods from https://developers.google.com/apps-script/reference/spreadsheet/range
// tricky part: modify the backgrounds, replacing the colors used in conditional formatting by white
range.clearFormat();
range.setBackgrounds(backgrounds)
.setFontColors(fontColors)
.setFontFamilies(fontFamilies)
// .set other things
这里我假设条件格式只影响单元格背景。如果无法过滤背景颜色(这需要确切知道条件格式规则中使用了哪些颜色),条件格式的效果将变成普通的背景颜色,这是非常不可取的......最好放弃设置背景颜色。