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

标签 google-apps-script google-docs delete-row

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

基本上在示例文档中
( https://docs.google.com/document/d/1VPua9T1d9qQFMCuvTlIqnvmhhMoplimZar4oAemAGPM/edit?usp=sharing ),我想删除所有包含工作人员 Derek 的行。从日志中可以看出,第 17 行和第 18 行(在标题为“本周日程安排”的第二个表中)和第 25-29 行(在以议程/注释开头的第四个表中)。

如果我单独运行每个循环,下面的代码将运行良好并删除我想要的行(抛出错误 re:我刚刚忽略的子索引除外)。

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

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”的所有表格行:

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 } } } } 并将其删除。

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

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

更新

要从表 2 中删除第 17-18 行和从表 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());
}

关于google-apps-script - 从 Google 文档中的两个不同表中删除行很困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68762494/

相关文章:

php - 如何使用 PHP 和 PDO 正确删除一行

javascript - 谷歌日历脚本 : remove recurrence

python - 使用 Python 将文件上传到 Google Docs 时出现 403 错误

html - 如何使用Google Docs作为网站后端?

google-apps-script - 如何将一个谷歌文档复制到另一个文档中

MySQL使用LIMIT或使用WHERE删除记录

php - 从mysql表中删除记录

google-apps-script - ReferenceError : Jdbc is not defined, V8版本问题?

google-apps-script - Google Apps Script - 读取电子表格数据、循环和写回数据

javascript - 使用 Apps Script .toISOString() 方法转换时髦的日期时间