Google Apps Script:表格首行颜色无法修改问题求助
Google Apps Script 首行链接颜色样式不生效问题
我正在开发一款Google Apps Script脚本,用于在脚本运行/表格打开时修改指定数据范围的链接颜色,避免出现未样式化的链接。当前版本需基于指定范围设置所有文本颜色,首行存在合并单元格,但第二行同样有合并单元格却能正常生效。
猜测的问题点:
- 首行需设置白色文本
- 前两行的链接需覆盖默认颜色
- 原始数组经切片拼接后用于设置文本颜色
- 首行颜色数组在单独循环中生成
- 混合使用Rich Text Value与Font Color
- 编辑的是数据范围原始数据而非显示值
我已尝试检查数组维度、添加日志调试、调整循环逻辑等,但仍未解决首行颜色不修改的问题。
相关代码:
/* @OnlyCurrentDoc */ /** * A funtion to style links. @param: {string} arg1 - The sheet in this workbook that's meant to be styled. @param: {string} arg2 - Hex code expressing the desired color for just the links. @param: {string} arg3 - Hex code expressing the desired color for the "body" of the specified sheet. @param: {string} arg4 - Hex code expressing the desired color for the first row's text. @param: {string} arg5 - Hex code expressing the desired color for the second row's text. **/ function styleLinks(arg1="Neopets Blueprints Wishlist",arg2="#ffffff",arg3="#000000",arg4="#ffffff",arg5="#0b5394") { var sheet = SS.getSheetByName("Neopets Blueprint Wishlist" || arg1); var data1 = sheet.getDataRange(); var dataWord1 = data1.getDisplayValues(); var linkColor = '#3c78d8' || arg2; //textColor1 is the "normal", general text color. var textColor1 = '#000000' || arg3; //textColor2 is the first row color. var textColor2 = '#ffffff' || arg4; //textColor3 is the second row color. var textColor3 = '#0b5394' || arg5; var data1LC = sheet.getLastColumn(); var data1LR = sheet.getLastRow(); var links1 = []; var inherit1 = data1.getRichTextValue(); var inheritStyle = inherit1.getTextStyle(); var inheritColor = inheritStyle.getForegroundColorObject(); var textColors = []; //console.log(dataWord1.length); //console.log(data1LC); //console.log(data1LR); //console.log(dataWord1[1]); //console.log(dataWord1) //console.log(dataWords1.length); //console.log(dataWord1[2]); //Below makes array of the Display Values. var dataWords1a = dataWord1.join().split(','); //Below makes an array of words from the previous array (Currently unused, meant for another draft of the code) //var dataWords1b = dataWords1a.join().split(" "); //dataWord1 is what the individual cells show (on each row), the outer array broken up by columns. //console.log(dataWord1); //console.log(dataWord1[1]); var dataRTVLinks = data1.getRichTextValues().map(r => r.map(c => { const link = c.getLinkUrl(); return link; })); function linkBool(item) { if(item === null) { return false } else { return true }; } //console.log(dataRTVLinks[1]); //console.log(dataRTVLinks[5]); let dataLinksBool = dataRTVLinks.map(r => r.map(linkBool)); var links2Rows = dataLinksBool.slice(0,2); //console.log(links2Rows); //console.log(dataLinksBool[1]); //console.log(dataWord1[1]); for (let i = 0; i < dataLinksBool.length; i++) { textColors[i] = []; for (let j = 0; j < data1LC; j++) {if(dataLinksBool[i][j] == true){ textColors[i][j]= linkColor} else {textColors[i][j] = textColor1;} } } //console.log(textColors.length); //console.log(textColors[0].length); //console.log(textColors[2].length); //console.log(textColors[15].length); var topColors = []; for (let k=0; k < links2Rows.length; k++) { topColors[k] = []; for (let l = 0; l < data1LC; l++) { if(links2Rows[k][l] == true) { topColors[k][l] = linkColor} else if (links2Rows[k][l] == false && k < 1) { topColors[k][l] = textColor2 } else {topColors[k][l] = textColor3 } } } console.log(topColors); console.log(topColors[0].length); topColors.flat(); let topArr1 = topColors.splice(0, 1).flat(); let topArr2 = topColors.splice(0, 1).flat(); //console.log("topArr1:"); //console.log(topArr1); //console.log("topArr2:"); //console.log(topArr2); textColors.splice(0,2,topArr1,topArr2); //console.log(textColors[1]); //data1.setFontColors(textColors); } //console.log(dataLinksBool[1]); //console.log(dataLinksBool[5]);
补充说明:
脚本可根据输入的hex code设置不同区域的文本颜色,生成与表格数据维度一致的颜色数组后,通过setTextColors()方法应用。
内容的提问来源于stack exchange,提问作者Freddin Mcguyer
相关产品推荐
相关产品推荐

