在Google Docs中从两个不同的表中删除行时遇到困难 [英] Difficulties getting rows deleted from two different tables in Google Docs
本文介绍了在Google Docs中从两个不同的表中删除行时遇到困难的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望你们中有一人愿意帮助我。很快就会很明显地看到,我对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行之后的所有空行并将其删除,则需要一个更复杂的解决方案。
但是我没能理解你的剧本。为什么需要嵌套循环?如果你找到了‘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 Docs中从两个不同的表中删除行时遇到困难的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文