使用 Google Apps 脚本从 Google 文档中删除空白的最后一页 space、选项卡

Removing empty last page space, tab from Google document using Google Apps Script

正在使用 Google Apps 脚本

从 Google 文档中删除空白的最后一页 space、选项卡

你好,我是 Script 新手

复制/粘贴后,我经常有包含几页带有 space 和制表符的文档

我正在尝试擦除输入的最后一个打印字符后面的所有内容,而不必 select 页数

我只需要打印第一页

你能告诉我吗?

tanaikech 脚本不适合我使用...太糟糕了

https://tanaikech.github.io/2020/01/17/deleting-last-empty-page-of-google-document-using-google-apps-script/

Tanaike's script 仅删除最后一段,并且在不检查该段落是否为空的情况下将其删除。

如果你想删除文档末尾的所有空段落,你可以这样做(注意,它会为每个空段落调用 API,请参阅我的更新版本):

function main() {
  var doc = DocumentApp.getActiveDocument();
  var id = doc.getId();

  var text = doc.getBody().getText();
  var pgfs = text.split('\n');

  while(pgfs.pop().replace(/\s+/,"") == "") remove_last_pgf(id);
}


// original Tanaike's script goes here

function remove_last_pgf(docId) {
  var c = Docs.Documents.get(docId, {
  fields: "body.content"
    }).body.content.pop();
      Docs.Documents.batchUpdate(
      {
        requests: [
          {
            deleteContentRange: {
              range: { startIndex: c.startIndex - 1, endIndex: c.endIndex - 1 }
            }
          }
        ]
      },
      docId
    );
}

不要忘记在脚本编辑器的服务中添加Google Docs API


更新

我进一步完善了脚本:

function main() {
  var doc = DocumentApp.getActiveDocument();
  var docId = doc.getId();
  var empty_tail = doc.getBody().getText().search(/\s+$/) + 1;
  if (empty_tail == 0) return; // prevent the error for empty docs
  
  var content = Docs.Documents.get(docId,{fields: "body.content"}).body.content.pop();

  var range = { startIndex: empty_tail, endIndex: content.endIndex-1 };
  var req = { deleteContentRange: { range } };

  Docs.Documents.batchUpdate( {requests: [req] }, docId );
}

现在它应该工作得更快,因为它不会为每个空行调用 API。它获取空字符 \s+ 开始的位置,并通过调用 API.

将它们全部删除

我在没有什么可擦除的时候得到这个错误信息。 如何解决这个问题?

function main() {
  var doc = DocumentApp.getActiveDocument();
  var docId = doc.getId();
  var empty_tail = doc.getBody().getText().search(/\s+$/) + 1;
  
  var content = Docs.Documents.get(docId,{fields: 
  "body.content"}).body.content.pop();
  if (empty_tail == 0) return;
  var range = { startIndex: empty_tail, endIndex: content.endIndex-1 };
  var req = { deleteContentRange: { range } };
  Docs.Documents.batchUpdate( {requests: [req] }, docId );
}