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()
已经得到了很好的优化