Google Apps脚本-文档。将具有格式的表格单元转换为HTML

时间:2018-11-12 16:38:33

标签: google-apps-script

我正在Google文档(而不是表格)中创建一个Google Script插件,使人们可以将内容输入到预定义的表格单元格中,然后稍后我需要对其进行解析并转换为HTML。

由于这个答案,我快到了:https://stackoverflow.com/a/47313357/2586977和它提到的GoogleDoc2HTML脚本。除了一些内容需要的简单格式(粗体,斜体和链接)之外,我可以得到所有我需要的东西。

链接文章中描述的方法使用getTextAttributeIndices()来确定这些属性更改的位置,然后将相应的HTML标记拼接到输出中以复制格式。有点long,但是行得通!

我遇到的问题是getTextAttributeIndices()仅适用于[Text][2]元素,而我正在尝试获取[TableCell][3]元素中的内容索引。

控制台向我显示错误消息:

  

TypeError:在对象TableCell中找不到函数getTextAttributeIndices。

如果先做myTableCell.getText(),我会丢失所有格式。

2 个答案:

答案 0 :(得分:1)

我终于破解了,所以我分享了答案,以防其他任何人遇到这个问题。

getTextAttributeIndices()仅适用于Text元素,不适用于TableCell元素。

但是事实证明,当您创建TableCell元素并在其中输入内容时,它会隐式创建一个Paragraph元素并且其中包含一个Text元素。

因此这不起作用:

  

myTableCell.getTextAttributeIndices()

但这确实可行:

  

myTableCell.getChild(0).getChild(0).getTextAttributeIndices()

答案 1 :(得分:0)

@axemonkey您的解决方案可以使用,但它很脆弱,因为文档不能保证段落元素始终是索引0的子元素。仔细阅读文档并找到此方法:

TabelCell::findElement(elementType)

您可以使用该方法来获取给定类型的子元素。它返回一个RangeElement,它包装了子元素,因此您必须调用以下方法:

RangeElement::getElement()


因此,使用上述方法,获取段落元素的一种更可靠的方法是:

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();