2

我有多个标题为:星期一、星期二、星期三、星期四、星期五和星期六的电子表格。每个电子表格都有 3 张表,标题为:Plan、Class 和 Coach。每个电子表格都有几乎相同的格式,唯一的区别是“Plan!”的第一列和最后 8 列中合并单元格的高度。

我不断更改电子表格中的值,因此虽然每个电子表格的格式相同,但值却大不相同。我也不想将所有工作表合并到一个电子表格中,因为我将有近 20 个选项卡可以浏览,这使得它非常混乱和耗时。

我遇到的问题是当我需要更改每张纸上的某些内容时。我的工作表需要是我可以根据我的需要全年更新和更改的东西,并且正如您所期望的那样,必须打开每个单独的工作表并在每个工作表中更改相同的内容可能会非常烦人。我发现 IMPORTRANGE 函数在保持我的标题行和其他常量在工作表之间更新方面非常有用,但是我还没有找到一种方法来使用条件格式,这是最烦人的必须更改的事情。

我在每张纸上都有多个条件格式规则,我真的需要一种方法来让每张纸在我更改或添加规则时自动更新,比如“星期一”。

  • 我只想复制条件格式规则。
  • 每当我更新“星期一”的条件格式规则时,我都需要更新每张工作表

这是我写的:

function copyConditional(){
  var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plan");
  var source = SpreadsheetApp.openById("1RJVmCimFh24NbAlENJvH5pT3zRq_KLJmFdEWqUN_Fo8").getSheetByName("Plan");
  var targetR = target.getRange('I3:AN59');
  var sourceR = source.getRange('I3:AN59');
  
  sourceR.copyTo(targetR,SpreadsheetApp.CopyPasteType.PASTE_CONDITIONAL_FORMATTING)
}

当我运行我的代码时,我收到一条错误消息,指出“异常:目标范围和源范围必须在同一个电子表格上。(第 14 行,文件'代码')”

现在,我不知道我想要做的事情是否真的可行,但我希望有一些解决方法可以解决我想要做的事情。我的代码经验很少,但我开始了解更多(感谢 Stack Overflow 这个伟大的社区!)。我将不胜感激您能给我的任何帮助。

4

2 回答 2

3

解决方案:


限制:

  • 此方法将源工作表计划的所有条件格式规则 复制到目标工作表计划,并且可能不是您要查找的内容。
  • 但是,如果您没有在工作表中使用多个条件格式规则,此解决方案可能仍然适用于您。

替代方法:

为了复制特定范围的条件格式,您需要使用ConditionalFormatRule类来获取应用条件格式规则的范围。因为,我无权访问您的工作表,也无法自己进行测试,所以我不知道您使用了多少种不同的条件格式规则以及在哪些范围内。作为起点,这是一个包含所有规则以及这些规则在源工作表中应用的范围的数组:

var rules = source.getConditionalFormatRules();

然后您遍历范围以准确找到哪些范围包含哪些规则:

var rule = source.getConditionalFormatRules()[0];
var ranges = rule.getRanges();
for (int i = 0; i < ranges.length; i++) {
  Logger.log(ranges[i].getA1Notation());
}

替代解决方案:

基于后者,您可以确定要复制到目标文件的规则,而不是复制所有规则。例如,如果 rangeI3:AN59则将条件格式规则复制到目标工作表:

function copyConditional(){

var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plan");
var source = SpreadsheetApp.openById("1RJVmCimFh24NbAlENJvH5pT3zRq_KLJmFdEWqUN_Fo8").getSheetByName("Plan");

var rules = source.getConditionalFormatRules();

for (let i = 0 ; i < rules.length; i++){

var ranges = rules[i].getRanges();
for (let j = 0; j < ranges.length; j++) {
  if(ranges[j].getA1Notation() == 'I3:AN59'){
   target.setConditionalFormatRules([rules[i]]);
 }
}
}
}

这种方法假定条件格式规则对于I3:AN59.

希望我的回答对你有所帮助。

于 2020-09-14T11:56:23.850 回答
0

这里只是一个想法:我知道您不想要一张带有一百万个标签的工作表,但您可以通过菜单和一些非常基本的代码来处理它。

在每个工作表名称前加上日期缩写或数字(例如 3 表示星期三)。

编写一些代码以显示相关日期并隐藏其他所有内容

使用 onOpen 函数显示今天的选项卡并隐藏其他所有内容。

还有一大堆菜单选项来显示特定的一天。

于 2022-02-04T09:22:00.153 回答