Javascript 具有多种字体颜色的段落与未设置字体颜色的段落?

Javascript 具有多种字体颜色的段落与未设置字体颜色的段落?,javascript,google-apps-script,google-docs,Javascript,Google Apps Script,Google Docs,在我的谷歌应用程序脚本中,我只想在整个段落已经是黑色的情况下更改文本的颜色。我可以通过以下方式轻松做到这一点: if (currentPar.editAsText().getForegroundColor() === "#000000") { currentPar.setForegroundColor("#ffffff"); } 我遇到的问题是,我文档中的大多数黑色文本在技术上是未设置的,这意味着currentPar.editAsText().g

在我的谷歌应用程序脚本中,我只想在整个段落已经是黑色的情况下更改文本的颜色。我可以通过以下方式轻松做到这一点:

if (currentPar.editAsText().getForegroundColor() === "#000000") {
    currentPar.setForegroundColor("#ffffff");
}
我遇到的问题是,我文档中的大多数黑色文本在技术上是未设置的,这意味着
currentPar.editAsText().getForegroundColor()
返回
null

我尝试将
| | currentPar.editAsText().getForegroundColor()==null
添加到条件中,但如果在同一段落中使用了多种颜色,则它也会返回true


有没有办法区分这两种情况下的
null

我相信您的目标如下

  • 当段落中所有字符的字体颜色为
    \000000
    时,您希望将段落的字体颜色设置为
    \ffffff
  • 例如,当段落中部分文本的字体颜色不是
    #000000
    时,您不希望更改段落的字体颜色
  • 您希望使用谷歌应用程序脚本实现这一点
修改点:
  • 在当前阶段,当文本为默认字体颜色
    #000000
    getForegroundColor()
    返回
    null
    。而且,即使段落中的文本部分不是
    #000000
    的颜色,也会返回
    null
    。(例如,当段落中的所有字符都是相同的颜色(如红色)时,将返回
    #ff0000
    。)这似乎是当前的规范
  • 为了实现您的目标,在这个答案中,我想使用
    getForegroundColor(offset)
    检查段落中每个字符的字体颜色
当上述各点反映到脚本中时,它将变成如下所示

示例脚本:
函数myFunction(){
记录片
.getActiveDocument()
.getBody()
.1段()
.forEach(p=>{
const text=p.editAsText();
设c=true;
for(设i=0;i
参考:

    • 我相信你的目标如下

      • 当段落中所有字符的字体颜色为
        \000000
        时,您希望将段落的字体颜色设置为
        \ffffff
      • 例如,当段落中部分文本的字体颜色不是
        #000000
        时,您不希望更改段落的字体颜色
      • 您希望使用谷歌应用程序脚本实现这一点
      修改点:
      • 在当前阶段,当文本为默认字体颜色
        #000000
        getForegroundColor()
        返回
        null
        。而且,即使段落中的文本部分不是
        #000000
        的颜色,也会返回
        null
        。(例如,当段落中的所有字符都是相同的颜色(如红色)时,将返回
        #ff0000
        。)这似乎是当前的规范
      • 为了实现您的目标,在这个答案中,我想使用
        getForegroundColor(offset)
        检查段落中每个字符的字体颜色
      当上述各点反映到脚本中时,它将变成如下所示

      示例脚本:
      函数myFunction(){
      记录片
      .getActiveDocument()
      .getBody()
      .1段()
      .forEach(p=>{
      const text=p.editAsText();
      设c=true;
      for(设i=0;i
      参考:

      作为对塔奈克优秀答案的补充,我刚刚发现,对他的算法的这种修改工作得更快一些:

      function myFunction() {
        DocumentApp
         .getActiveDocument()
         .getBody()
         .getParagraphs()
         .forEach(p => {
            const text = p.editAsText();
            const colors = text.getText().split("").map((_,i) => text.getForegroundColor(i));
            if (!colors.some(x => x != null)) text.setForegroundColor("#fffff");
          });
      }
      

      这看起来违反直觉。使用
      中断的循环应该工作得更快。可能函数
      some()
      优化得很好。

      作为对Tanaike优秀答案的补充,我刚刚发现对他的算法的这种修改工作得更快一些:

      function myFunction() {
        DocumentApp
         .getActiveDocument()
         .getBody()
         .getParagraphs()
         .forEach(p => {
            const text = p.editAsText();
            const colors = text.getText().split("").map((_,i) => text.getForegroundColor(i));
            if (!colors.some(x => x != null)) text.setForegroundColor("#fffff");
          });
      }
      
      这看起来违反直觉。使用
      中断的循环应该工作得更快。可能函数
      some()
      已经得到了很好的优化