Google apps script 获取表索引

Google apps script 获取表索引,google-apps-script,google-docs,Google Apps Script,Google Docs,在GoogleDocs中,您可以使用以下代码获得一个表数组 var doc = DocumentApp.getActiveDocument(); var body = doc.getBody(); var tables = body.getTables(); 但是,如果使用游标获取表的元素,我希望知道该元素属于数组中的哪个表。有一些方法可以获取表中元素的行和单元格,但我找不到任何方法可以为我提供表数组中父表的索引。有什么建议吗 var doc = DocumentApp.getActiveDo

在GoogleDocs中,您可以使用以下代码获得一个表数组

var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var tables = body.getTables();
但是,如果使用游标获取表的元素,我希望知道该元素属于数组中的哪个表。有一些方法可以获取表中元素的行和单元格,但我找不到任何方法可以为我提供表数组中父表的索引。有什么建议吗

var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
  • 您可以遍历游标的父级,直到到达表:
var-element=cursor.getElement();
while(element.getType()!=“TABLE”&&element.getType()!=“BODY_SECTION”){
element=element.getParent();
} 
Logger.log(元素);
  • 到达该表后,可以在其父表中获取该表的子索引(通常为
    BODY\u部分
    ):
if(element.getType()=“TABLE”){
var index=element.getParent().getChildIndex(element);
Logger.log(索引);
}
重要:

  • 索引将是父表I在主体部分中的位置,但是主体部分可能包含表以外的其他元素,因此您需要知道表和主体索引之间的对应关系
您可以实施它,例如使用

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

函数myFunction(){
var doc=DocumentApp.getActiveDocument();
var body=doc.getBody();
var指数=[];
var tables=body.getTables().forEach(函数(表){tableindex.push(body.getChildIndex(表))});
var cursor=doc.getCursor();
var element=cursor.getElement();
while(element.getType()!=“TABLE”&&element.getType()!=“BODY_SECTION”){
element=element.getParent();
} 
Logger.log(元素);
if(element.getType()=“TABLE”){
var index=element.getParent().getChildIndex(element);
var tableNumber=TableIndex.indexOf(index)+1;
Logger.log(“光标在表内”+表号);
}
}

多亏了@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);
  }
};
功能测试(){
试一试{
var doc=DocumentApp.getActiveDocument();
var body=doc.getBody();
var cursor=doc.getCursor();
var element=cursor.getElement();
while(element.getType()!==documentpp.ElementType.TABLE){
element=element.getParent();
if(element==null)return;//未选择表
}
var bIndex=element.getParent().getChildIndex(element);
Logger.log(“bIndex=“+bIndex”);
var i=0;
var tIndex=-1;
var child=null;

while(如我所写),如果存在表、文本和其他项的混合,则您的代码不会给出正确的值。例如,在我的测试用例中,我的光标位于第二个表中,但返回的索引是6。是的,这是有意义的。这就是我的“重要”所在第节是关于:您需要分别确定正文中不同元素的索引。例如,如果表的索引为2、4和6,并且包含游标的元素具有索引6,则您知道它是第三个表。您可以通过编程方式实现它,例如,将表的索引推入arr是,然后将包含元素的游标的索引与数组中表的相应索引的位置进行比较。我希望我能以一种可以理解的方式解释我自己。谢谢,我已经考虑过你的建议。只是希望有一个更简单的解决方案。它没有你想象的那么复杂-我添加了一个完整的示例t哦,我的回答。