为什么在使用.setBold()时,Google Apps脚本会抛出'ReferenceError:'粗体“未定义”?

时间:2015-02-22 12:09:52

标签: javascript arrays google-apps-script

上下文:我需要处理/更正包含多个特定文字错误的许多文字文档,突出显示'粗体'然后输出结果。我有一个包含两个工作表的Google电子表格:一个包含两列' 错误的字词'和' 替换字形' (2d数组)我打算随着时间的推移添加它并将其用作数据存储来调用;'另一个是单列的单词集合(1d数组)我指定"关键字"检查然后在目标文件中突出显示。

我尝试过的功能:我使用了初学者视频的基本数组迭代循环(我无法添加更多链接,我道歉)并换入{成功地body.replaceText() {1}}处理来自我的"数据存储区"的更正进入我的目标文档,几乎完美。如果没有完全相同的情况,它会忽略文本值......但这是另一天的问题。

sendEmail()

我尝试失败的事情:然后我尝试使用function fixWords() { // Document to edit var td = DocumentApp.openById('docId1'); // Document holding comparison datastore var ss = SpreadsheetApp.openById('docId2'); // Create data objects var body = td.getBody(); var sheet = ss.getSheetByName("Word Replacements"); var range = sheet.getDataRange(); var values = range.getValues(); // Create a loop (iterate through the cell data) for (i=1;i<values.length;i++) { fault = values[i][0]; solution = values[i][2]; body.replaceText(fault, solution); } } 代码替换setBold()的值,但我最接近的是第一个数组中关键字的实例将被正确设置样式,但没有其他实例...不像使用fixWords函数从Word替换数组中纠正错误拼写单词的所有实例。

我发现&#39; highlightTextTwo' example here at stackoverflow效果非常好,但我无法弄清楚如何交换外部数据源或强制包含的不同迭代循环对我有利。

我已经扫描了GAS参考资料,看了Google developer videos for snippets that might apply ...但很明显我错过了一些可能是编程基础的东西。但老实说,我不知道为什么这不像replaceText()功能那么简单。

body.replaceText()

抛出&#39; TypeError:在对象DIV中找不到函数getStartOffset。 (第15行,文件&#34; boldIt&#34;)。&#39;我想这意味着只是盲目地交换此代码,它会查找错误的对象...但我无法弄清楚它为什么适用于function boldKeywords() { // https://stackoverflow.com/questions/12064972 // Document to edit var doc = DocumentApp.openById('docId1'); // Access the keyword worksheet, create objects var ss = SpreadsheetApp.openById('docId2'); var sheet = ss.getSheetByName("Keywords"); var range = sheet.getDataRange(); var values = range.getValues(); var highlightStyle = {}; highlightStyle[DocumentApp.Attribute.BOLD] = 'true'; for (i=1; i<values.length; ++i) { textLocation = values[i]; if (textLocation != null && textLocation.getStartOffset() != -1) { textLocation.getElement().setAttributes(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle); } } } 而不适用于x.replaceText()或{ {1}}或x.setAttributes() ...似乎并不是一个&#34;了解Google Apps脚本示例&#34;处理一些普通,无趣的用例这么低的东西......足以让我弄清楚如何将它指向正确的对象,然后操纵&#34; if语句&#34;参数来获得我需要的行为。

我当前的砖墙:我再次发现这个例子Text formatting for strings in Google Documents from Google Apps Script,看起来很有希望,即使DocsList语法已被弃用(我相当确定) 。但现在我得到&#34;粗体未定义&#34;扔在我身上。大胆......没有定义。 :: mouth agape ::

x.setBold

我将很高兴地牺牲我的长子,以便你的作物可以在来年蓬勃发展,以换取一些见解。

2 个答案:

答案 0 :(得分:1)

我将它用于我的脚本,即setStyleAttribute方法。

文档:https://developers.google.com/apps-script/ui_supportedStyles

示例:

TexBox.setStyleAttribute("fontWeight", "bold");

答案 1 :(得分:0)

bold参数是布尔数据类型。您需要使用truefalse一词。

替换&#34;粗体&#34;用&#34; true&#34;。

text.setBold(text.startOffset, text.endOffsetInclusive, true);

查看&#34; 类型&#34;文档中的列:

Google Documentation - setBold