英文:
How to change the text color in google-docs based on an range selected from google-sheets
问题
我有一个包含不同颜色的各种单元格的Google表格,我能够创建一个脚本,用表格范围中的值替换Google文档模板,但我无法在替换值时保留它们的原始颜色。
我能够捕获单元格的颜色,但找不到应用它们的方法。
setForegroundColor(color);
只能将文本颜色更改为黑色...
我目前的代码如下:
const template = DriveApp.getFileById('sadfasfadjkg');
const destination = DriveApp.getFolderById('sadfasfadjkg');
const range = SpreadsheetApp.getActiveSheet().getRange('C3:E26');
const rangeValues = range.getDisplayValues();
const richTextValues = range.getRichTextValues();
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
const today = `${new Date().getDate()}/${new Date().getMonth()+1}/${new Date().getFullYear()}`;
const copyDoc = template.makeCopy(`Report ${today}`, destination);
const doc = DocumentApp.openById(copyDoc.getId());
const body = doc.getBody();
for (let x = 0; x < rangeValues.length; x++) {
for (let y = 0; y < rangeValues[x].length; y++) {
const cellTxt = richTextValues[x][y];
const style = cellTxt.getTextStyle();
const color = style.getForegroundColor();
body.replaceText(`{{${x}-${y}}}`, rangeValues[x][y]).setForegroundColor(color);
}
}
doc.saveAndClose();
const url = doc.getUrl();
sheet.getRange('J1').setValue(url);
}
英文:
I have a google sheets with various cells containing diferent colors, i was able to make a script that replaces a google-docs template with the values from the sheets range, but im not being able to also change the color with it's original when i replace the values.
I was able to capture the colors from the cells but i can't find a way to apply it.
the setForegroundColor(color);
changes the text color to black only...
The code i have till now:
const template = DriveApp.getFileById('sadfasfadjkg');
const destination = DriveApp.getFolderById('sadfasfadjkg');
const range = SpreadsheetApp.getActiveSheet().getRange('C3:E26');
const rangeValues = range.getDisplayValues();
const richTextValues = range.getRichTextValues();
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
const today = `${new Date().getDate()}/${new Date().getMonth()+1}/${new Date().getFullYear()}`;
const copyDoc = template.makeCopy(`Report ${today}`, destination);
const doc = DocumentApp.openById(copyDoc.getId());
const body = doc.getBody();
for (let x = 0; x < rangeValues.length; x++) {
for (let y = 0; y < rangeValues[x].length; y++) {
const cellTxt = richTextValues[x][y];
const style = cellTxt.getTextStyle();
const color = style.getForegroundColor();
body.replaceText(`{{${x}-${y}}}`, rangeValues[x][y]).setForegroundColor(color);
}
}
doc.saveAndClose();
const url = doc.getUrl();
sheet.getRange('J1').setValue(url);
}
</details>
# 答案1
**得分**: 2
我猜您期望的结果如下所示。
- 您想要用电子表格的单元格值替换Google文档中的占位符,并且还想复制单元格值的字体颜色。
尽管不幸的是,我不确定我是否正确理解了您的脚本中的`但我不能改变颜色与它的原始颜色`,不过以下修改如何?
### 从:
```javascript
const richTextValues = range.getRichTextValues();
到:
const fontColor = range.getFontColorObjects();
并且,请按照以下方式进行修改。
从:
const cellTxt = richTextValues[x][y];
const style = cellTxt.getTextStyle();
const color = style.getForegroundColor();
body.replaceText(`{{${x}-${y}}}`, rangeValues[x][y]).setForegroundColor(color);
到:
const forgroundColor = fontColor[x][y].asRgbColor().asHexString().slice(0, 7);
const search = `{{${x}-${y}}}`;
let s = body.findText(search);
while (s) {
const e = s.getElement();
const start = s.getStartOffset();
const text = e.asText().replaceText(search, rangeValues[x][y]);
text.asText().setForegroundColor(start, start + rangeValues[x][y].length, forgroundColor);
s = e.findText(search, s);
}
- 当运行这个修改后的脚本时,每个占位符都会被替换为单元格值,并且单元格值的字体颜色也会被反映出来。
参考:
英文:
I guessed your expected result is as follows.
- You want to replace the placeholders in Google Documents with the cell values of Spreadsheet, and also, you want to copy the font color of the cell value.
Although, unfortunately, I'm not sure whether I could correctly understand but im not being able to also change the color with it's original when i replace the values.
, in your script, how about the following modification?
From:
const richTextValues = range.getRichTextValues();
To:
const fontColor = range.getFontColorObjects();
And, please modify as follows.
From:
const cellTxt = richTextValues[x][y];
const style = cellTxt.getTextStyle();
const color = style.getForegroundColor();
body.replaceText(`{{${x}-${y}}}`, rangeValues[x][y]).setForegroundColor(color);
To:
const forgroundColor = fontColor[x][y].asRgbColor().asHexString().slice(0, 7);
const search = `{{${x}-${y}}}`;
let s = body.findText(search);
while (s) {
const e = s.getElement();
const start = s.getStartOffset();
const text = e.asText().replaceText(search, rangeValues[x][y]);
text.asText().setForegroundColor(start, start + rangeValues[x][y].length, forgroundColor);
s = e.findText(search, s);
}
- When this modified script is run, each placeholder is replaced with the cell value, and the font color of the cell value is also reflected.
References:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论