谷歌Apps脚本;文档;转换选择的元素,以HTML

问题描述 投票:2回答:2

我刚开始与谷歌Apps脚本和下面的加载项快速入门

https://developers.google.com/apps-script/quickstart/docs

在快速启动,你可以在外接创建一个简单的从一个文件得到一个选择,它与LanguageApp服务翻译。这个例子获取使用此基础文本​​:

function getSelectedText() {
  var selection = DocumentApp.getActiveDocument().getSelection();
  if (selection) {
    var text = [];
    var elements = selection.getSelectedElements();
    for (var i = 0; i < elements.length; i++) {
      if (elements[i].isPartial()) {
        var element = elements[i].getElement().asText();
        var startIndex = elements[i].getStartOffset();
        var endIndex = elements[i].getEndOffsetInclusive();

        text.push(element.getText().substring(startIndex, endIndex + 1));
      } else {
        var element = elements[i].getElement();
        // Only translate elements that can be edited as text; skip images and
        // other non-text elements.
        if (element.editAsText) {
          var elementText = element.asText().getText();
          // This check is necessary to exclude images, which return a blank
          // text element.
          if (elementText != '') {
            text.push(elementText);
          }
        }
      }
    }
    if (text.length == 0) {
      throw 'Please select some text.';
    }
    return text;
  } else {
    throw 'Please select some text.';
  }
}

它得到的只有文字:element.getText(),不带任何格式。

我知道底层的对象不是HTML,但有一种方式来获得转换成HTML串的选择?例如,如果选择具有格式的混合,如粗体:

这是大胆的文字样本

那么有没有什么方法,扩展名,图书馆等, - 就像element.getHTML() - 这可能返回这一点?

这与<b>粗体</ b>的文本样本

不是吗?

这是大胆的文字样本

google-apps-script google-docs google-docs-api google-apps-script-editor
2个回答
1
投票

有奥马尔AL Zabir脚本GoogleDoc2HTML。它的目的是将整个文档转换成HTML。既然你只是想选择的元素中的富文本转换,有关你的任务的功能是从脚本,如下图所示processText

getTextAttributeIndices给出的起始偏移量文本属性的每个变化,如从正常到粗体或背面的方法。如果只有一个变化,这是整个单元(通常段)的属性,这是在if语句的第一部分处理。

与一般的情况下,第二部分处理,遍历索引和插入对应于该属性的HTML标记。

该脚本不能维持,所以把它作为一个起点,为自己的代码,而不是一个现成的使用库。有迹象表明,完善的转换过程中,特别是行内链接一些未合并的永久居民。

function processText(item, output) {
  var text = item.getText();
  var indices = item.getTextAttributeIndices();

  if (indices.length <= 1) {
    // Assuming that a whole para fully italic is a quote
    if(item.isBold()) {
      output.push('<b>' + text + '</b>');
    }
    else if(item.isItalic()) {
      output.push('<blockquote>' + text + '</blockquote>');
    }
    else if (text.trim().indexOf('http://') == 0) {
      output.push('<a href="' + text + '" rel="nofollow">' + text + '</a>');
    }
    else {
      output.push(text);
    }
  }
  else {

    for (var i=0; i < indices.length; i ++) {
      var partAtts = item.getAttributes(indices[i]);
      var startPos = indices[i];
      var endPos = i+1 < indices.length ? indices[i+1]: text.length;
      var partText = text.substring(startPos, endPos);

      Logger.log(partText);

      if (partAtts.ITALIC) {
        output.push('<i>');
      }
      if (partAtts.BOLD) {
        output.push('<b>');
      }
      if (partAtts.UNDERLINE) {
        output.push('<u>');
      }

      // If someone has written [xxx] and made this whole text some special font, like superscript
      // then treat it as a reference and make it superscript.
      // Unfortunately in Google Docs, there's no way to detect superscript
      if (partText.indexOf('[')==0 && partText[partText.length-1] == ']') {
        output.push('<sup>' + partText + '</sup>');
      }
      else if (partText.trim().indexOf('http://') == 0) {
        output.push('<a href="' + partText + '" rel="nofollow">' + partText + '</a>');
      }
      else {
        output.push(partText);
      }

      if (partAtts.ITALIC) {
        output.push('</i>');
      }
      if (partAtts.BOLD) {
        output.push('</b>');
      }
      if (partAtts.UNDERLINE) {
        output.push('</u>');
      }

    }
  }
}

0
投票

最终使一个脚本来支持大胆+链接+斜体我用例:

function getHtmlOfElement(element) {
  var text = element.editAsText();
  var string = text.getText();
  var indices = text.getTextAttributeIndices();
  var output = [];

  for (var i = 0; i < indices.length; i++) {
    var offset = indices[i];
    var startPos = offset;
    var endPos = i+1 < indices.length ? indices[i+1]: string.length;
    var partText = string.substring(startPos, endPos);

    var isBold = text.isBold(offset);
    var isItalic = text.isItalic(offset);
    var linkUrl = text.getLinkUrl(offset);

    if (isBold) {
      output.push('<b>');
    }
    if (isItalic) {
      output.push('<i>');
    }
    if (linkUrl) {
      output.push('<a href="' + linkUrl + '">');
    }

    output.push(partText);

    if (isBold) {
      output.push('</b>');
    }
    if (isItalic) {
      output.push('</i>');
    }
    if (linkUrl) {
      output.push('</a>');
    }
  }

  return output.join("");
}

你可以简单地调用它使用类似:

getHtmlOfElement(myTableCell); // returns something like "<b>Bold</b> test."
© www.soinside.com 2019 - 2024. All rights reserved.