【问题标题】:Find and remove blank line查找并删除空行
【发布时间】:2021-10-21 20:17:19
【问题描述】:

我正在尝试创建一种受密码保护的方式来将我的签名放在谷歌文档中并创建一个 PDF。我能够完成密码保护,添加签名,并发送到 PDF。这没有在下面显示,但我在文档中使用了一个术语“{{Sig}}”来替换为图像文件。我不希望图像保留在谷歌文档中。下面的代码删除了签名图像。但是,如果需要,我想将“{{Sig}}”术语放回原处以允许将来的签名。我可以通过在“{{Sig}}”应该出现的位置之前搜索“Sincerely”来做到这一点。然而,在“{{Sig}}”和我的名字之间最后多了一个空行。有没有办法找到并删除那条线?

function DelSig(fileID)  {
  var docTarget = DocumentApp.openById(fileID);
  var docBody = docTarget.getBody();
  var docImages = docBody.getImages();
  var docText = docBody.getText();
  var docImage = docImages[0];
  docImage.removeFromParent();
  myFunction = docReplace(docTarget, "Sincerely,", "Sincerely,\n{{Sig}}");
  docTarget.saveAndClose();
  docTarget = DocumentApp.openById(fileID);
  docBody = docTarget.getBody();
}

另外,这是我的 docReplace 函数:

function docReplace(docTarget,oldStr,newStr) {
  var docBody = docTarget.getBody();
  docBody.replaceText(oldStr,newStr);
}

下面的三张图片显示了正在发生的事情。左边的图像显示了我如何从 Google Doc 开始。中心图像是 PDF 的屏幕截图,矩形代表签名。右边的图像是它在 Google Doc 中的结束方式。该代码删除了签名图像,但留下了一个空行(或空段落?)。该空段落将根据文档具有不同的索引。有没有办法搜索和替换那个空段落?

【问题讨论】:

  • 如何将字母 S 下方的文字上移一行?此外,这在 Google Doc 文件中。我不想更改 PDF。感谢您的意见,非常感谢。
  • 实际上 \n 并没有将其删除 2 行。问题是当我删除签名图像时,它会留下我放置签名图像之前没有的行。我想删除图像所在的行,因为它现在是空行。我实际上想删除 {{Sig}} 下的那一行。如果空行有一个字符,我可以将它包含在我的替换中。
  • 你能分享一个演示这个的示例文档吗?
  • 我刚刚在帖子中添加了三张小图片。希望这提供了一些清晰度。鲁本的回答似乎很有希望,因为它们都应该是从结尾开始的相同数量的段落。

标签: google-apps-script google-docs


【解决方案1】:

Google 文档中的基本内容元素是段落。通过获取相应的段落,您可能可以得到空行。

如果您的名字在最后一段中,请尝试获取它之前的那个。

function removeParaBeforeLast(){
  const body = DocumentApp.getActiveDocument().getBody();
  const beforeLast = body.getParagraphs().slice(-2)[0];
  beforeLast.removeFromParent();  
}

相关

【讨论】:

  • 这很有帮助,谢谢。我以前不知道切片。如果您确切地知道从底部开始的哪一段,并且在添加签名图像时我的其他代码没有删除“真诚”一词,这将起作用。
【解决方案2】:

下面的修改似乎完成了我所追求的。您似乎无法搜索空行;但是,我能够使用 forEach 循环搜索上面的段落,然后将我想要的文本附加到空段落上。段落的 forEach 循环在使用 Google 文档时似乎非常强大。

Ruben 的回答效果很好,尽管我不得不根据底部的段落数引入一个新变量。我还遇到了一个我以前不知道的问题——即使用 \n 替换文本也没有添加段落。这导致“真诚地”在第二次被无意中替换,并且没有出现在 PDF 中。

function DelSig(fileID)  {
  var docTarget = DocumentApp.openById(fileID);
  var docBody = docTarget.getBody();
  var docImages = docBody.getImages();
  var docImage = docImages[0];
  docImage.removeFromParent();
  var docPars = docBody.getParagraphs();
  var fndTxt = false;
  docPars.forEach(function (curPar)  {
    if(fndTxt == true)  {
      curPar.appendText("{{Sig}}");
      fndTxt = false;
    }
    if(curPar.findText("Sincerely,") !== null) {
      fndTxt = true;
    }
  });
  docTarget.saveAndClose();
}

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2014-06-21
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多