获取表索引

时间:2020-11-11 13:52:24

标签: google-apps-script google-docs

在Google文档中,您可以使用以下代码获取表格数组

var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var tables = body.getTables();

但是,如果我使用光标获取表的元素,我想知道该元素属于数组中的哪个表。有一些方法可以获取表中元素的行和单元格,但是我找不到能给我表数组中父表索引的方法。有什么建议吗?

var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();

2 个答案:

答案 0 :(得分:0)

  • 您可以遍历游标的父项,直到到达表为止:
  var element = cursor.getElement();
  while (element.getType() != "TABLE" && element.getType() != "BODY_SECTION"){
  element = element.getParent();
  } 
  Logger.log(element);
  • 一旦到达表,就可以在其父表(通常为BODY_SECTION)中获取表的子索引:
  if(element.getType() == "TABLE"){
    var index = element.getParent().getChildIndex(element);
    Logger.log(index);
  }

重要:

  • 索引将是父表在正文部分之后的位置,但是要注意,正文部分可能还会包含表以外的其他元素,因此您需要了解表和正文索引之间的对应关系。

您可以实现它,例如与

  var tables = body.getTables().forEach(function(table){
    Logger.log(body.getChildIndex(table))
});

完整样本:

function myFunction() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var tableIndices = [];
  var tables = body.getTables().forEach(function(table){tableIndices.push(body.getChildIndex(table))});
  var cursor = doc.getCursor();
  var element = cursor.getElement();
  while (element.getType() != "TABLE" && element.getType() != "BODY_SECTION"){
    element = element.getParent();
  } 
  Logger.log(element);
  if(element.getType() == "TABLE"){
    var index = element.getParent().getChildIndex(element);
    var tableNumber = tableIndices.indexOf(index)+1;
    Logger.log("The cursor is inside table " + tableNumber);
  }
}

答案 1 :(得分:0)

由于@ziganotschka,我找到了解决方案。

function test() {
  try {
    var doc = DocumentApp.getActiveDocument();
    var body = doc.getBody();
    var cursor = doc.getCursor();
    var element = cursor.getElement();
    while( element.getType() !== DocumentApp.ElementType.TABLE ) {
      element = element.getParent();
      if( element === null ) return;  // did not pick a table
    }
    var bIndex = element.getParent().getChildIndex(element);
    Logger.log("bIndex= "+bIndex);
    var i = 0;
    var tIndex = -1;
    var child = null;
    while( i <= bIndex ) {
      child = body.getChild(i);
      Logger.log("i= "+i+" child= "+child)
      if( child.getType() === DocumentApp.ElementType.TABLE ) tIndex++;
      i++;
    }
    DocumentApp.getUi().alert("tIndex= "+tIndex);
  }
  catch(err) {
    Logger.log("Error in test: "+err);
  }
};
相关问题