从 Google 文档中的两个不同表中删除行很困难

Difficulties getting rows deleted from two different tables in Google Docs

我希望你们中的一位愿意帮助我。很快就会很明显地发现,我对 Google Apps Script(和循环,就此而言,但我正在努力学习)还很陌生。我希望我的代码不会让你畏缩。

基本上在示例文档中
(https://docs.google.com/document/d/1VPua9T1d9qQFMCuvTlIqnvmhhMoplimZar4oAemAGPM/edit?usp=sharing),我想删除所有包含工作人员 Derek 的行。从日志中它表明将是第 17 行和第 18 行(在第二个 table 中,标题为“本周日程”)和第 25-29 行(在第四个 table 中,以 Agenda/Notes).

下面的代码将 运行 正常并删除我想要的行,如果我 运行 每个循环单独(除了抛出错误 re: a child index我只是驳回)。

当我尝试 运行 将它们放在一起时,我接近了但在第一个 table 中,其中一行(在顶部 table)没有删除。我先尝试了 运行ning 第二个循环,这让情况变得更糟。如果您能提供任何帮助,我们将不胜感激。

function DeleteRows() {
var doc = DocumentApp.getActiveDocument()
var body = doc.getBody();
var tables = body.getTables();
var numRows = tables[1].getNumRows();
var numRows2 = tables[3].getNumRows();

   
var row;
var val;
  
 for(row = 0; row<numRows-1; row++) {
 val = tables[1].getCell(row, 1).getText 

 tables[1].getRow(16).removeFromParent();    
     
 var row2;
 var val2;
    
for(row2 = 0; row2<numRows2-1; row2++) {    
val2 = tables[3].getCell(row2, 1).getText();
tables[3].getRow(24).removeFromParent(); 
     
     

  Logger.log(numRows);
  }
 }
}

基本上,您可以通过 'Derek' 删除所有 table 行:

function DeleteRows() {
  var body = DocumentApp.getActiveDocument().getBody();
  var found_element = body.findText('Derek');
  while (found_element != null) {
    found_element.getElement().getParent().getParent().getParent().removeFromParent();
    found_element = body.findText('Derek', found_element)
  }
}

它只是会找到每个 'Derek' 获取其父项的父项 { table row : { table cell : { paragraph: { text } } } } 并将其删除。

对于你的情况,它只能部分工作,因为你的 table 已经合并了单元格。如果您想找到 'Derek's 行之后的所有空行并将它们也删除,则需要更复杂的解决方案。

但是我没看懂你的剧本。为什么需要嵌套循环?如果您找到 'Derek' 代码中的任何条件在哪里?

更新

要从 table 2 中删除第 17-18 行,从 table 4 中删除第 25-29 行,您可以使用此函数:

function DeleteRows2() {
  var tables = DocumentApp.getActiveDocument().getBody().getTables();
  [17,18].reverse().forEach(n => tables[1].getRow(n-1).removeFromParent());
  [25,26,27,28,29].reverse().forEach(n => tables[3].getRow(n-1).removeFromParent());
}