我正在Google文档(而不是表格)中创建一个Google Script插件,使人们可以将内容输入到预定义的表格单元格中,然后稍后我需要对其进行解析并转换为HTML。
由于这个答案,我快到了:https://stackoverflow.com/a/47313357/2586977和它提到的GoogleDoc2HTML脚本。除了一些内容需要的简单格式(粗体,斜体和链接)之外,我可以得到所有我需要的东西。
链接文章中描述的方法使用getTextAttributeIndices()
来确定这些属性更改的位置,然后将相应的HTML标记拼接到输出中以复制格式。有点long,但是行得通!
我遇到的问题是getTextAttributeIndices()
仅适用于[Text][2]
元素,而我正在尝试获取[TableCell][3]
元素中的内容索引。
控制台向我显示错误消息:
TypeError:在对象TableCell中找不到函数getTextAttributeIndices。
如果先做myTableCell.getText()
,我会丢失所有格式。
答案 0 :(得分:1)
我终于破解了,所以我分享了答案,以防其他任何人遇到这个问题。
getTextAttributeIndices()
仅适用于Text
元素,不适用于TableCell
元素。
但是事实证明,当您创建TableCell
元素并在其中输入内容时,它会隐式创建一个Paragraph
元素并且其中包含一个Text
元素。
因此这不起作用:
myTableCell.getTextAttributeIndices()
但这确实可行:
myTableCell.getChild(0).getChild(0).getTextAttributeIndices()
答案 1 :(得分:0)
@axemonkey您的解决方案可以使用,但它很脆弱,因为文档不能保证段落元素始终是索引0的子元素。仔细阅读文档并找到此方法:
TabelCell::findElement(elementType)
您可以使用该方法来获取给定类型的子元素。它返回一个RangeElement
,它包装了子元素,因此您必须调用以下方法:
因此,使用上述方法,获取段落元素的一种更可靠的方法是:
var paragraph = tableCell.findElement(DocumentApp.ElementType.PARAGRAPH).getElement();
要获取段落中的Text
元素,您还可以在段落实例上使用findElement()
:
var text = paragraph.findElement(DocumentApp.ElementType.TEXT).getElement();
因此,将所有内容整合在一起
var paragraph = tableCell.findElement(DocumentApp.ElementType.PARAGRAPH).getElement();
var text = paragraph.findElement(DocumentApp.ElementType.TEXT).getElement();
var indices = text.getAttributeIndices();
要编写的代码更多,但是您将拥有更多可读的代码,并且由于不依赖于子索引,因此其中断的可能性较小。
PS:在getElement()
上调用RangeElement
方法时,它会返回元素,但是就Apps Script GUI而言,您只会自动完成与{{ 3}}界面。如果要自动完成特定于给定元素类型的属性和方法,请利用Element接口中定义的许多类型转换方法之一。这些方法始终以as
为前缀。因此,要获得text元素的代码完成,您可以编写如下代码:
var text = paragraph.findElement(DocumentApp.ElementType.TEXT).getElement().asText();